gpt4 book ai didi

javascript - 如何将 Promise 返回到 Promise.all() 中。 Promise.all() 返回一个 Promise

转载 作者:行者123 更新时间:2023-12-02 20:59:30 27 4
gpt4 key购买 nike

我的问题很简单。 Promise.all() 方法可以返回 Promise 吗?让我解释一下:

function simpleFunction() {
let queue = [];
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);

Promise.all(queue)
.then(() => return Promise.resolve())
.catch(err => {
return Promise.reject(err);
});
}

使用此函数,如果 queue 的其中一个 Promise 被拒绝,我想拒绝错误。实际上,我有“无法处理拒绝”错误,我认为就是因为这个。所以,我正在尝试其他事情。

async function simpleFunction() {
let queue = [];
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);

try {
await Promise.all(queue);
return Promise.resolve();
} catch (error) {
return Promise.reject(err);
}

更改后,我再次遇到此问题,但我认为第二种方法是正确的,但我不知道为什么它不起作用。

感谢您的宝贵时间。

最佳答案

问题是你的

return Promise.reject(err);

在两个片段中。这会导致整个事情解决的 Promise 被拒绝,如果该拒绝没有在任何地方得到处理,您将收到“未处理的拒绝”警告。

如果 simpleFunction 的使用者需要使用 Promise,请确保它也捕获它,并确保返回 Promise.all调用。

无需将 Promise.all 调用包装在 .thencatch 中,您只需返回 Promise 即可.all 本身。这将创建一个 Promise,如果数组中的任何 Promise 被拒绝,它就会被拒绝,这正是您想要的:

function simpleFunction() {
let queue = [];
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);

return Promise.all(queue);
}
simpleFunction()
.catch((err) => {
// handle errors
});

或者,如果消费者不使用 Promise,则在 simpleFunction 中使用 .catch,但不要创建被拒绝的 Promise ,只需处理错误(或在 catch 中忽略它,尽管这不是一个好主意):

function simpleFunction() {
let queue = [];
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);
queue.push(*PROMISE1*);

Promise.all(queue)
.catch((err) => {
// handle errors here
// do NOT call `Promise.reject`,
// because then the rejection will be unhandled
});
}

关于javascript - 如何将 Promise 返回到 Promise.all() 中。 Promise.all() 返回一个 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61386864/

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