Node.JS 비동기 모듈 사용

3587 단어 node.js
Node.JS의 가장 큰 골칫거리는 비동기 함수가 너무 많아서 프로그램의 흐름을 제어하기 어렵다는 것이다.그러나 async 모듈이 생기면 이 문제는 더 이상 문제가 아니다.여기서 우리는 async 모듈의 용법을 총결해 봅시다.
만약 우리가 두 파일의 내용을 각각 읽어야 한다면, 둘 다 성공하면 다른 조작을 실행할 것이다.동기화된 사고방식에 따라 코드는 다음과 같습니다.
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

좋은 웹페이지 즐겨찾기