我正在学习异步库,只是自己尝试了一些代码,而我却发出了无法处理的问题,请您看一下下面的代码:)
async.parallel([
function (cb) {
setTimeout(() => {
let a = "asd";
console.log("AAA");
cb(a, null);
}, 2000);
},
function (cb) {
setTimeout( () => {
let b = "dasd";
console.log("BBBBB");
cb(b, null);
}, 5000);
}
], function (error, results) {
console.log("CCC");
console.log("Errors: " + error);
console.log("Results: " + results);
});
我以为BBB不应输出到屏幕,但令我惊讶的是,您能帮助我理解为什么吗?
答案 0 :(得分:2)
您正在使用async.parallel()
。所有异步任务都将在不等待的情况下执行,并且不能保证执行顺序。
以下是脚本执行方式的详细信息:
setTimeout()
。console.log("AAA")
和cb(a, null)
。cb(a, null)
出错。这样便调用了主回调,并且async.parallel()
结束了。setTimeout()
已设置。调用主回调不会清除超时。console.log("BBBBB")
和cb(b, null)
被调用。这就是为什么您看到输出BBBBB
的原因。cb(b, null)
不会做任何事情。