voi*_*ams 32 javascript asynchronous node.js
var async = require('async');
function callbackhandler(err, results) {
console.log('It came back with this ' + results);
}
function takes5Seconds(callback) {
console.log('Starting 5 second task');
setTimeout( function() {
console.log('Just finshed 5 seconds');
callback(null, 'five');
}, 5000);
}
function takes2Seconds(callback) {
console.log('Starting 2 second task');
setTimeout( function() {
console.log('Just finshed 2 seconds');
callback(null, 'two');
}, 2000);
}
async.series([takes2Seconds(callbackhandler),
takes5Seconds(callbackhandler)], function(err, results){
console.log('Result of the whole run is ' + results);
})
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
Starting 2 second task
Starting 5 second task
Just finshed 2 seconds
It came back with this two
Just finshed 5 seconds
It came back with this five
Run Code Online (Sandbox Code Playgroud)
我期待take2Second函数在take5Second开始之前完全完成.它是如何工作的.请告诉我.而最终的功能永远不会运行.谢谢.
Jam*_*ice 42
不完全的.您正在立即执行这些功能(一旦评估了数组),这就是它们似乎同时启动的原因.
传递给要执行的每个函数的回调是异步库的内部.一旦函数完成,执行它,传递错误和/或值.您不需要自己定义该功能.
最后的函数永远不会在你的情况下运行,因为async需要你调用以回到系列中的下一个函数的回调函数从未实际执行过(只有你的callbackHandler
函数被执行).
试试这个:
async.series([
takes2Seconds,
takes5seconds
], function (err, results) {
// Here, results is an array of the value from each function
console.log(results); // outputs: ['two', 'five']
});
Run Code Online (Sandbox Code Playgroud)
Noa*_*oah 17
詹姆斯给了你很好的概述async.series
.请注意,您可以在系列数组中设置匿名函数,然后使用参数调用实际函数
var async = require('async')
var param1 = 'foobar'
function withParams(param1, callback) {
console.log('withParams function called')
console.log(param1)
callback()
}
function withoutParams(callback) {
console.log('withoutParams function called')
callback()
}
async.series([
function(callback) {
withParams(param1, callback)
},
withoutParams
], function(err) {
console.log('all functions complete')
})
Run Code Online (Sandbox Code Playgroud)
小智 11
我创建异步系列的首选方法是使用操作数组,如下所示;
var async = require('async'),
operations = [];
operations.push(takes2Seconds);
operations.push(takes5seconds);
async.series(operations, function (err, results) {
// results[1]
// results[2]
});
function takes2Seconds(callback) {
callback(null, results);
}
function takes5seconds(callback) {
callback(null, results);
}
Run Code Online (Sandbox Code Playgroud)
async.series
([
function (callback)
{
response=wsCall.post(user,url,method,response);
console.log("one");
callback();
}
,
function (callback)
{
console.log("two");
//console.log(response);
callback();
}
]
,
function(err)
{
console.log('Both a and b are saved now');
console.log(response);
});
Run Code Online (Sandbox Code Playgroud)