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()
都已设置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);
});