下面我有一个返回承诺的函数,如果execAsyc
有效,arrayItem
会抛出错误,如果它无效,我们会转到下一个。有没有迭代的方法来做到这一点?
function performAction () {
return Promise.resolve()
.then(() => {
return execAsync(arrayItem[0])
})
.catch(() => {
return execAsync(arrayItem[1])
})
.catch(() => {
return execAsync(arrayItem[2])
})
}
答案 0 :(得分:0)
使用Array#reduce可以帮助您:
function performAction() {
return arrayItem.reduce((prev, item) => {
return prev.catch(() => execAsync(item))
}, Promise.reject()) // start out with a rejected promise, so that execAsync is called for the first item in your array
}
此函数返回一个promise,如果execAsync
对数组中的所有项目失败,则会拒绝,或者使用execAsync
的结果解析第一个有效项目。