【发布时间】:2017-11-12 02:11:42
【问题描述】:
我刚刚学习了 Promise.all() 的概念,并对它的机制很好奇。根据我对 Promise 的有限了解,它在 .then() 方法中传递一个回调函数并在定义中调用它。例如:
var p = new Promise((resolve) => {
setTimeout(resolve, 2000);
setTimeout(() => {
console.log('4 sec function');
}, 4000);
});
p.then(() => {
console.log('2 sec function');
});
// result:
// 2 sec function
// 4 sec function
但是,当我们使用Promise.all() 时,它会在所有承诺都实现时触发回调。正如我的猜测,它触发了最终实现的承诺中的回调。在下面的例子中,我对结果的看法是“四”。但是,它会打印四个数字的数组。为什么会这样?更具体地说:
回调实际触发了多少次?
在 Promise 定义中的哪个位置触发了回调?
将什么值传递给回调?
这是我研究的代码:
var p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'one');
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, 'two');
});
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'three');
});
var p4 = new Promise((resolve, reject) => {
setTimeout(resolve, 4000, 'four');
});
Promise.all([p1, p2, p3, p4]).then(values => {
console.log(values);
});
// print:
// one
// two
// three
// four
【问题讨论】:
-
documentation 告诉你你需要知道的一切
-
感谢@JaromandaX 我正在阅读
标签: javascript promise