Node.js async.parallel的函数在另一个函数调用回调函数时出错后工作,为什么?

Node.js async.parallel的函数在另一个函数调用回调函数时出错后工作,为什么?,node.js,asynchronous,Node.js,Asynchronous,我在学习异步库,自己也尝试了一些代码,我遇到了一个无法处理的问题,你能看看下面的代码吗:) 我以为BBB不应该输出到屏幕上,但令我惊讶的是,它确实输出了,你能帮我理解为什么吗 您正在使用async.parallel()。所有异步任务都将在不等待对方的情况下执行,并且执行顺序不保证 下面是脚本执行方式的详细说明: 两个setTimeout()都已设置 2000毫秒后,console.log(“AAA”)和cb(a,null)被调用 cb(a,null)有一个错误。因此,主回调被调用,async.p

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


我以为BBB不应该输出到屏幕上,但令我惊讶的是,它确实输出了,你能帮我理解为什么吗

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

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

  • 两个
    setTimeout()
    都已设置
  • 2000毫秒后,
    console.log(“AAA”)
    cb(a,null)
    被调用
  • cb(a,null)
    有一个错误。因此,主回调被调用,
    async.parallel()
    结束
  • 但故事并没有就此结束。第二个
    setTimeout()
    已设置。调用主回调不会清除超时
  • 调用
    console.log(“BBBBB”)
    cb(b,null)
    。这就是为什么您会看到输出
    BBBBB
  • 因为已经调用了主回调,所以调用
    cb(b,null)
    不会做任何事情

  • 为什么你认为
    BBBBB
    不会被输出?因为,文档说如果任何函数将错误传递给它的回调函数,主回调函数会立即被调用,并带有错误值。好的,我明白了。没错,但不管怎样,5秒后仍会调用
    setTimeout
    。确切地说,为什么???????只是,我想检查新用户
    s的电子邮件和用户名是否不是由其他人以async.parallel方式接收的,但不起作用
    
        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);
      });