gpt4 book ai didi

javascript - 在 Promise.race 中的第一个 Promise 被解析(拒绝)后,执行是否完成?

转载 作者:太空宇宙 更新时间:2023-11-03 22:42:17 25 4
gpt4 key购买 nike

我无法理解 Promise.race 行为是什么。它是否会在 promise 数组中的第一个 promise 实例被解析(拒绝)后停止,而忽略所有其余的?

我的目标是执行数组中的所有 promise 。以任何顺序但都应该执行。

举个例子。假设 array_of_urls 有 10 个 url。 Promise.race 会以任意顺序逐个执行所有 10 个 Promise,还是会在第一个 Promise 后停止?

.then(array_of_urls => {

// array_of_urls == [10 urls]
let array_of_promises = array_of_urls.map((url) => {
return fetch(url).then(res => {
return res;
});
});

return Promise.race(array_of_promises);
})
.then(each_and_every_result => {

// What does happen here? Will this `then` callback be called 10 times or just one?

})

Promise 是否有执行所有方法的方法?

附注:

MDN doesn't explain如果全部执行或者停止:

The race function returns a Promise that is settled the same way as the first passed promise to settle. It resolves or rejects, whichever happens first.

更新:

抱歉,没解释清楚。我确实需要执行数组中的所有 Promise,但不是按 Promise.all 的方式执行。是的,Promise.all 会执行所有的操作,但它会等到所有的操作都执行完毕,收集它们的结果,然后返回一个包含所有结果的数组。每次这 10 个中的一个被填满时,我都需要调用一个回调。也就是说,无需等待,Promise.all 即可收集所有这些内容。

最佳答案

Promise 只是异步操作的通知系统。他们根本不控制异步操作​​。事实上,事实恰恰相反,异步操作控制着 promise 。因此,无论您在 Promise 中使用 Promise.race()Promise.all() 还是其他方案,都不会影响底层的异步操作。它仅影响您收到的有关异步操作完成的通知类型。

因此,当您使用 Promise.all() 时,当所有异步操作均已成功完成或其中一个操作出现错误时,您会收到通知。如果其中一个出现错误,所有其他异步操作仍在运行,并将运行至正常完成。只有您的 Promise.all(...).then() 处理程序会受到影响。

当您使用Promise.race()时,您只会在第一个异步操作完成时收到通知。其他异步操作仍将运行至正常完成。

如果您想在每个单独的异步操作完成时收到通知,那么您只需将一个 .then() 处理程序附加到每个单独的 Promise 和那些 .then()处理程序完全不受 Promise 数组上是否还有 Promise.all() 或 Promise.race() 的影响 - 这只是另一个通知。

我发现将 Promise 视为异步操作的通知机制效果最好。一旦异步操作启动,它们就根本不控制异步操作​​。相反,它们提供有关异步操作完成后发生的情况的结构化通知。

// What does happen here? Will this then callback be called 10 times or just one?

Promise 只会解析或拒绝一次,因此您的 Promise.all(...).then()Promise.race(...).then() 处理程序只会被调用一次。

Will Promise.race execute all 10 promises, in any sequence one by one, or will it stop after the very first?

当您调用 Promise.race() 时,您的异步操作已经开始,并且都已经在进行中。他们都会被处决。 Promise.race() 对异步操作本身的执行没有影响 - 它只是提供有关第一个异步操作何时完成的通知。

关于javascript - 在 Promise.race 中的第一个 Promise 被解析(拒绝)后,执行是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40318271/

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