async.series([
function(callback) {
setTimeout(function(){ console.log("2"); }, 1000 * 10);
callback();
},
function(callback) {
console.log("1"); }, 1000 * 10);
callback();
},
], function(err) {
console.log("done");
});
我正在尝试执行上面的代码。我希望结果是
1
2
完成了
但我得到结果为
1
做过
2
有人可以帮我解决为什么在系列回调之前执行最终回调吗?
答案 0 :(得分:0)
您的代码无法编译
function(callback) {
console.log("1"); }, 1000 * 10);
callback();
}
我想你想写:
function(callback) {
setTimeout(function(){ console.log("1"); }, 1000 * 10);
callback();
},
我认为你必须使用promise而不是async lib。
类似的东西:
new Promise(resolve => {
setTimeout(function(){ console.log("1"); resolve(); }, 1000 * 10);
})
.then(() => {
setTimeout(function(){ console.log("2"); Promise.resolve(); }, 1000 * 10);
})
.then(() => {
console.log('done');
});
答案 1 :(得分:0)
callback
参数的想法是,在您的案例setTimeout
中完成异步任务时,您可以调用它。
当达到超时时间时,调用setTimeout
的函数参数,也就是应该调用callback
时:
async.series([
function(callback) {
setTimeout(function() { console.log("1"); callback(); }, 1000 * 10);
},
function(callback) {
setTimeout(function() { console.log("2"); callback(); }, 1000 * 10);
},
], function(err) {
console.log("done");
});
因为每个条目都是串行调用的,所以代码将按如下方式执行:
1
callback
转到下一个条目2
callback
转到最终功能done