IT story

node.js 비동기 라이브러리

hot-time 2020. 12. 31. 22:54
반응형

node.js 비동기 라이브러리


콜백 증후군의 계층을 수정하는 데 도움이되는 수많은 라이브러리가 있습니다.

사실 너무 많아서 어느 것을 사용해야합니까?


Async.js를 사용 합니다 .

Async는 비동기 JavaScript 작업을위한 간단하고 강력한 기능을 제공하는 유틸리티 모듈입니다. 원래 node.js와 함께 사용하도록 설계되었지만 브라우저에서 직접 사용할 수도 있습니다.

async.map(['file1','file2','file3'], fs.stat, function(err, results){
    // results is now an array of stats for each file
});

async.filter(['file1','file2','file3'], path.exists, function(results){
    // results now equals an array of the existing files
});

async.parallel([
    function(){ ... },
    function(){ ... }
], callback);

async.series([
    function(){ ... },
    function(){ ... }
]);

당신이 좋아하는 것을 선택하십시오 : P. 예를 들어 비동기좋아 합니다. 하지만 스텝 도 꽤 유명합니다. 모듈이 너무 많아서 좋은 일이라고 생각합니다. node.js 커뮤니티는 정말 좋은 모듈을 내놓고 있습니다. NPM과 함께 설치하면 노력이 전혀 들지 않습니다.


Q의 약속 을 사용하고 싶습니다 .

함수가 차단없이 값을 반환하거나 예외를 throw 할 수없는 경우 대신 promise를 반환 할 수 있습니다. Promise는 반환 값 또는 함수가 결국 제공 할 수있는 throw 된 예외를 나타내는 개체입니다. 약속은 대기 시간을 극복하기 위해 원격 개체의 프록시로 사용할 수도 있습니다.

첫 번째 패스에서 약속은 코드가 앞으로 나아갈 때보 다 오른쪽으로 빠르게 진행되는 상황 인 "파멸의 피라미드"를 완화 할 수 있습니다.

step1(function (value1) {
    step2(value1, function(value2) {
        step3(value2, function(value3) {
            step4(value3, function(value4) {
                // Do something with value4
            });
        });
    });
});

promise 라이브러리를 사용하면 피라미드를 평평하게 만들 수 있습니다.

Q.fcall(step1)
.then(step2)
.then(step3)
.then(step4)
.then(function (value4) {
    // Do something with value4
}, function (error) {
    // Handle any error from step1 through step4
})
.done();

이 접근 방식을 사용하면 try, catch 및 finally와 같이 암시 적 오류 전파도 얻을 수 있습니다. 1 단계의 오류는 5 단계까지 계속 진행되며 여기서 포착 및 처리됩니다.

콜백 접근 방식을 "제어 반전"이라고합니다. 반환 값 대신 콜백을받는 함수는“전화 하지마, 전화 할게.”라고 말한다. 반전을 취소하여 입력 인수를 제어 흐름 인수에서 명확하게 분리합니다. 이는 API, 특히 가변, 휴식 및 확산 인수의 사용 및 생성을 단순화합니다.


다른 동기화 라이브러리의 문제는 처음에 모든 작업을 정의해야하는 경우가 많았고 내가 찾은 깔끔하고 직관적 인 API를 제공하지 않았다는 것입니다. 저는 단순히 작업을 언제 어디서나 그룹에 푸시 한 다음 해당 그룹을 병렬 또는 직렬 방식으로 실행하고 싶었습니다.

I love the flow functionality inside TaskGroup, and used it for a lot of big projects including DocPad and BugHerd. Examples are in the README.

ReferenceURL : https://stackoverflow.com/questions/5139381/node-js-async-libs

반응형