我对Promise感到陌生,我知道基本的Promise会采用一种方法来处理类似(resolve, reject) => { ... }
的函数并相应地处理结果,因此Promise.all似乎可以并行处理一系列函数。但是,我也在Promise中看到了一些函数用法,这些用法不是将(resolve, reject)
作为输入,而只是将new Promise(() => { return 1 + 1;})
作为输入,因此,如果我有几个不需要resolve
的函数,例如
function sum(a, b) { return a + b; }
function sub(a, b) { return a - b; }
function multiple(a, b) { return a * b; }
如果我在三个函数上使用Promise.all,这是否意味着我正在并行运行其中三个函数?像
之类的东西Promise.all([()=>sum(1,2), ()=>sub(1,2), ()=>multiple(1,2)])
总体来说,Promise.all
是一个概念,我们可以并行运行多个javascript方法(是否异步,是否解析)?
[否,Promise.all会收到像Array这样的迭代器。因此,当您调用promise.all时,它会遍历传递的元素。如果它们是函数,则执行它们并返回返回值,然后检查该值,从而使这些函数同步运行。现在进一步列出了如何评估值。
var p = Promise.all([]); // will be immediately resolved
var p2 = Promise.all([1337, "hi"]); // non-promise values will be ignored, but the evaluation will be done asynchronously just once for promise.all
console.log(p);
console.log(p2)
setTimeout(function() {
console.log('the stack is now empty');
console.log(p2);
});
// logs
// Promise { <state>: "fulfilled", <value>: Array[0] }
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: Array[2] }