是Promise.即使没有解析,也可以并行运行多个方法



我是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时,它会对传递的元素进行迭代。如果它们是函数,则不会发生任何事情(dead函数(。如果执行了它们,则会检查返回值,从而使这些函数同步运行。下面列出了它如何进一步评估这些值。

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] }

相关内容

最新更新