gpt4 book ai didi

javascript - 从递归函数 catch 中解析一个 promise

转载 作者:行者123 更新时间:2023-11-30 15:23:13 24 4
gpt4 key购买 nike

我有一个函数在捕获到错误时使用不同的输入递归调用自身:

function getSomething(inputs, index) {

var index = index || 0
, indexMax = inputs.length - 1

return new Promise((resolve, reject) => {
//inputs[index].staff is an array and getSomethingElse returns a Promise
Promise.all(inputs[index].staff.map(getSomethingElse))
.then(output => {
resolve(output)
})
.catch(reason => {
if(index<indexMax)
getSomething(inputs, index+1);
else
reject(reason);
})
})
}

getSomething(myInputs)
.then(output => {
console.log('resolved with this:'+output);
})
.catch(reason => {
console.log('rejected because of this:'+reason);
});

我收到 UnhandledPromiseRejectionWarning: Unhandled Promise rejection error from getSomethingElse rejection。我认为这种拒绝并没有像预期的那样在第一个函数调用中被捕获。我怎样才能调用第一个函数调用的拒绝?还是我应该在每次函数调用中将第一个 promise 作为参数带在身边?

最佳答案

这是 promise constructor anti-pattern .构造函数用于包装遗留 API。

相反,将 promise 链接起来,就像它们本来的意思一样 returning all of them .

function getSomething(inputs, index = 0) {
return Promise.all(inputs[index].staff.map(getSomethingElse))
.catch(reason => {
if (index >= inputs.length - 1) throw reason;
return getSomething(inputs, index+1);
})
})
}

关于javascript - 从递归函数 catch 中解析一个 promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43388534/

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