gpt4 book ai didi

javascript - 在 Chrome 中使用 native 实现处理并行 promise

转载 作者:行者123 更新时间:2023-12-03 17:19:50 27 4
gpt4 key购买 nike

Chrome(至少我正在使用的测试版)现在已经在原生 JavaScript 中实现了 promise ,并且根据一些实验,它工作正常。有很多关于“then”和“catch”方法的文档,我能够将 promises 链接在一起,这样,当一个完成时,就可以等待下一个。

但是,我想知道如何并行等待 promise ,并在 promise 全部履行或拒绝时调用回调函数。在这种情况下,所有的结果和原因也必须可用,也许在一个数组中。

转储 JavaScript 对象(“Promise”),我看到一个方法“all”,但找不到它的文档。

谁能提供这方面的信息?

我还实现了自己的实验性并行机制,如下所示:

function async1_promise() {
return new Promise(
function(resolve, reject) {
async_call1(
function () {
resolve("async_call1 worked!");
}
);
}
);
}

function async2_promise() {
return new Promise(
function(resolve, reject) {
async_call2(
function () {
resolve("async_call2 worked!");
}
);
}
);
}

function async3_promise() {
return new Promise(
function(resolve, reject) {
async_call3(
function () {
resolve("async_call3 worked!");
}
);
}
);
}

parallel([async1_promise(), async2_promise(), async3_promise()],
function (promises, results) {
console.log('all done', promises, results);
}
);

function parallel(promises, callback) {
var results = [];
promises.forEach(
function (val, key, array) {
val.then(
function (result) {
results[key] = {
success: true,
result: result
};
if (results.length == promises.length)
callback(promises, results);
},
function (reason) {
results[key] = {
success: false,
result: reason
};
if (results.length == promises.length)
callback(promises, results);
}
);
}
);
}

也欢迎对我处理并行 promise 的尝试发表评论。

最佳答案

Promise.all 接受一组 Promise 实例,只有在它们全部解决或一个被拒绝后才会继续。

一旦所有的 promise 都得到解决,它会按照传递给 Promise.all 的相同顺序给你一个结果数组,这样你就可以访问所有的响应,或者遇到的第一个拒绝将触发 catch

使用您的示例,以下内容可以替换您的parallel 函数:

Promise.all([async1_promise(), async2_promise(), async3_promise()])
.then(function(results) {
// results = ["async_call1 worked!", "async_call2 worked!", "async_call3 worked!"]
})
.catch(err) {
// error handling
// only called once for the first reject encountered
});

有用的链接

关于javascript - 在 Chrome 中使用 native 实现处理并行 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com