Node.JS 비동기 모듈 사용
3587 단어 node.js
만약 우리가 두 파일의 내용을 각각 읽어야 한다면, 둘 다 성공하면 다른 조작을 실행할 것이다.동기화된 사고방식에 따라 코드는 다음과 같습니다.
function task1() {
fs.readFile('somefile', function(err, data) {
if (err) throw err;
window.data1 = data;
console.log('task1 done!');
});
}
function task2() {
fs.readFile('morefile', function(err, data) {
if (err) throw err;
window.data2 = data;
console.log('task2 done!');
});
}
function then() {
var data1 = window.data1;
var data2 = windos.data2;
console.log(data1 + data2);
console.log('both tasks done!');
}
task1();
task2();
then();
그러나 현재readFile은 비동기 함수입니다. 이 코드는 오류입니다. 함수then의 결과를 먼저 출력하기 때문입니다.정확한 작법으로 바꾸려면 함수의 삽입이 필요하다. 번거롭고 보기 싫다.이제 async 모듈로 바꾸는 방법은 훨씬 간단합니다.
async.parallel([
function(callback){
fs.readFile('somefile', function(err, data) {
console.log('task1 done!');
callback(err, data);
});
},
function(callback){
fs.readFile('morefile', function(err, data) {
console.log('task2 done!');
callback(err, data);
});
}
],
function(err, results){
if (err) throw err;
var data1 = results[0];
var data2 = results[1];
console.log(data1 + data2);
console.log('two tasks done!');
});
이것은 async의parallel이라는 동시 실행 함수를 사용합니다. 이것은 앞의 두 함수가 모두 실행된 후에야 원래 함수인then의 내용을 실행할 수 있습니다.또한 이러한 사용법의 관건적인 점을 알 수 있습니다. 병행 실행되는 모든 함수는callback 매개 변수가 있어야 합니다. 이 callback 매개 변수는 이 함수에서 마지막으로 오류 정보와 반환 값을 parallel 함수에 제공하는 것을 책임집니다.따라서 이 콜백 함수는 반드시 호출해야 합니다. 오류 정보와 반환 값이 없어도 마지막에 콜백 () 을 사용해야 합니다.
만약 앞의 두 임무의 콘솔이log는 필요하지 않습니다. 위의 코드는 다음과 같이 간소화할 수 있습니다.
async.parallel([
function(callback){
fs.readFile('somefile', callback);
},
function(callback){
fs.readFile('morefile', callback);
}
],
function(err, results){
if (err) throw err;
var data1 = results[0];
var data2 = results[1];
console.log(data1 + data2);
console.log('two tasks done!');
});
이것은 async 작업의 리셋 함수와 Node 때문입니다.JS 비동기식 동작의 리셋 함수 매개 변수는 일치합니다. 모두 error와 데이터 두 개입니다.이렇게 쓰면 더욱 간결하고 예뻐진다.
series,waterfall,auto,each 등 다른 비동기적인 실행 프로세스를 제어하는 함수도 있는데 그들의 사용법은 위의 예와 유사하다.
참고 자료:[1]caolan/async - Async utilities for node and the browser [2] Node.js async in practice: When to use what? [3] Async 세부 사항 중 하나: 프로세스 제어 | Freewind.me [4] Async 상세 설명 2: 도구 클래스 | Freewind.me [5] Async 세부 사항 3: 컬렉션 작업 | Freewind.me [6] node.js async.series not working - Stack Overflow [7] Asynchronous code in node.js
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express + AWS S3 이미지 업로드하기웹 사이트 및 모바일 애플리케이션 등에서 원하는 양의 데이터를 저장하고 보호할 수 있다. 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공한다. AWS S3 에 저장된 객체에 대한 컨테이너...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.