Okk*_*kky 7 javascript asynchronous node.js
我有一个异步函数,可以处理另外两个异步函数的结果.
直到现在我正在做的是我在回调函数1中编写function2,在function2的回调中编写函数2
function1(callbackFunction() {
function2(callbackFunction() {
function3()
})
})
Run Code Online (Sandbox Code Playgroud)
有没有其他办法来处理这个问题.我通常使用客户端和nodeJs中的JavaScript代码.
我的情况是,对于function2,我不需要function1的输出.换句话说,function1和function2是独立的; 但是function3依赖于function1和function2.
我希望我的function2在function1上独立运行,但是function3依赖于functio1和function2来运行.
有没有像
function1();
function2();
when(funtion1.complete && funtion2.complete) {
function3();
}
Run Code Online (Sandbox Code Playgroud)
有一些很好的库来处理编排异步函数.async和q(或其他Promises/A图书馆)帮助.
如果function2不依赖于结果function1,则可以并行执行它们.以下是它的外观async(这些示例假设您的回调具有function(err, result)签名,这是Node的实际模式:
async.parallel([
function(callback) { function1(callback); },
function(callback) { function2(callback); }
], function(err, values) {
function3(values[0], values[1]);
});
Run Code Online (Sandbox Code Playgroud)
如果function2取决于结果function1,waterfall可能是一个更好的模式:
async.waterfall([
function(callback) { function1(callback); },
function(result, callback) { function2(result, callback); },
function(result, callback) { function3(result, callback); },
]);
Run Code Online (Sandbox Code Playgroud)
就个人而言,我喜欢q,因为你可以通过承诺并做各种漂亮的东西.以下是使用它的方式:
q.nfcall(function1)
.then(function(result) { return q.nfcall(function2); })
.then(function(result) { return q.nfcall(function3); })
.fail(function(err) {
// If any of them fail, this is called.
});
Run Code Online (Sandbox Code Playgroud)
或者,如果function1并且function2可以按任意顺序完成:
q.all([q.nfcall(function1), q.nfcall(function2)])
.then(function(values) { function3(values[0], values[1]); })
.fail(function(err) {
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1934 次 |
| 最近记录: |