node.js async libs

Mar*_*ark 56 asynchronous callback node.js

有大量的库可以帮助修复回调综合症的层次.

事实上,有太多,我使用哪一个?

Bag*_*ggz 44

我使用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(){ ... }
]);
Run Code Online (Sandbox Code Playgroud)


Alf*_*red 6

选一个你喜欢的:P.我喜欢async例如.但步骤也很有名.我认为有这么多模块是一件非常好的事情.node.js社区正在推出一些非常好的模块.使用NPM安装它们不会花费任何费用.


lak*_*tak 5

我喜欢使用Q的承诺:

如果函数无法返回值或在不阻塞的情况下抛出异常,则可以返回promise.promise是一个对象,表示函数最终可能提供的返回值或抛出的异常.promise也可以用作远程对象的代理来克服延迟.

在第一次通过时,承诺可以缓解"厄运金字塔":代码向右前进的速度比前进的速度快.

step1(function (value1) {
    step2(value1, function(value2) {
        step3(value2, function(value3) {
            step4(value3, function(value4) {
                // Do something with value4
            });
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

使用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();
Run Code Online (Sandbox Code Playgroud)

使用这种方法,您还可以获得隐式错误传播,就像try,catch和finally一样.step1中的错误将一直流向step5,在那里捕获并处理它.

回调方法称为"控制反转".接受回调而不是返回值的函数是:"不要打电话给我,我会给你打电话." Promise取消反转,将输入参数与控制流参数完全分开.这简化了API的使用和创建,特别是可变参数,休息和传播参数.