Promise.all 疑问
最近用bluebird
在使用Promise.all
的时候发现一个问题(不能算是问题,是我不解的地方),直接上代码:
var fun_A = function (i) {
console.log('fun_A:', i);
return Promise.resolve(i);
}
var tasks = [fun_A(1);
tasks.push([fun_A(2));
//代码到这里,我还没调用Promise.all执行tasks,直接运行代码会输出:
fun_A: 1
fun_A: 1
//即我把函数添加到tasks数组里的时候,添加进去的函数已经被调用了
//按道理不应该是我调用了Promise.all(tasks)的时候才会输出的吗?也就是调用Promise.all(tasks)才会执行我tasks里的函数的吗?
4 回复
这不是很明显么,你执行了fun_A(1)和fun_A(2)函数啊 Promise.all(array),array里面必须是promise 你的函数fun_A执行了才会return一个promise,既然执行了,两个console.log输出不是很正常么
@hyj1991 可能是我没表述清楚,我的意思是在我把函数fun_A push到tasks数组里后,这时候不调用Promise.all 直接运行代码,就会有log输出,正常逻辑不应是push到tasks之后,然后在Promise.all执行tasks才会输出log吗?
@imhered 代码肯定是会执行的,你push进去的就是执行后的函数,promise.all控制的只是resolve返回的结果,不能控制你函数的执行
@ncuzp 哦,这样理解应该是说的通的