gpt4 book ai didi

node.js - async.parallel 的函数在另一个函数调用回调函数并出现错误后正常工作,为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:17:40 24 4
gpt4 key购买 nike

我正在学习异步库,只是自己尝试了一些代码,但我遇到了一个无法处理的问题,您能看一下下面的代码吗:)

    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 不应该输出到屏幕,但令我惊讶的是它确实输出,你能帮我理解为什么吗?

最佳答案

您正在使用async.parallel()。所有异步任务都会在不互相等待的情况下执行,并且不保证执行顺序。

以下是脚本执行方式的详细说明:

  1. 两个 setTimeout() 均已设置。
  2. 2000 毫秒后,调用 console.log("AAA")cb(a, null)
  3. cb(a, null) 有错误。因此,主回调被调用,async.parallel() 结束。
  4. 但故事并没有到此结束。第二个 setTimeout() 已设置。调用主回调不会清除超时。
  5. 调用
  6. console.log("BBBBB")cb(b, null)。这就是您看到输出 BBBBB 的原因。
  7. 因为主回调已被调用,所以调用 cb(b, null) 不会执行任何操作。

关于node.js - async.parallel 的函数在另一个函数调用回调函数并出现错误后正常工作,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53418339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com