Javascript node.js async.series是这样工作的吗?
输出如下所示:Javascript node.js async.series是这样工作的吗?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,输出如下所示: 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() {
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);
})
我希望Takes2秒函数在Takes5秒开始之前完全完成。
这就是它的工作原理。请让我知道。
最后一个函数永远不会运行。谢谢 不完全是。您正在立即执行这些函数(只要对数组求值),这就是它们同时启动的原因 传递给要执行的每个函数的回调是异步库的内部回调。一旦函数完成,就可以执行它,并传递错误和/或值。你不需要自己定义这个函数 在您的案例中,最后一个函数永远不会运行,因为async需要您调用以转到系列中的下一个函数的回调函数从未实际执行过(只有
callbackHandler
函数才会执行)
请尝试以下方法:
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
James向您介绍了
async.series
。请注意,您可以在series数组中设置匿名函数,然后使用参数调用实际函数
async.series([
takes2Seconds,
takes5seconds
], function (err, results) {
// Here, results is an array of the value from each function
console.log(results); // outputs: ['two', 'five']
});
我创建异步系列的首选方法是使用操作数组,如下所示:
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')
})
在
async.series
中,所有函数都以串联方式执行,每个函数的合并输出被传递到最终回调。e、 g
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);
});
输出:
var async = require('async');
async.series([
function (callback) {
console.log('First Execute..');
callback(null, 'userPersonalData');
},
function (callback) {
console.log('Second Execute.. ');
callback(null, 'userDependentData');
}
],
function (err, result) {
console.log(result);
});
詹姆斯,谢谢你对这件事的清楚解释。在我按照建议做了这些更改之后,它就可以工作了。是否可以将参数传递给这些函数?在进一步阅读文档时,看起来我应该使用async.apply将参数传递给函数。Noah,是的,我最终发现了这一点。不管怎样,谢谢你的发帖。欢迎来到SO,谢谢你的回答。如果格式正确并稍加解释,这个答案会有用得多。并不是说您的帮助不受欢迎,而是因为它的质量问题,您的答案可能会被删除,这对您或社区中的任何人都没有好处。您如何将.series()函数放在前面很有趣。我有点喜欢这样。
async.series
如何知道其中一个操作遇到错误?如何执行此异步序列?
var async = require('async');
async.series([
function (callback) {
console.log('First Execute..');
callback(null, 'userPersonalData');
},
function (callback) {
console.log('Second Execute.. ');
callback(null, 'userDependentData');
}
],
function (err, result) {
console.log(result);
});
First Execute..
Second Execute..
['userPersonalData','userDependentData'] //result