错误

时间:2017-11-21 20:26:48

标签: node.js promise

下面我有一个返回承诺的函数,如果execAsyc有效,arrayItem会抛出错误,如果它无效,我们会转到下一个。有没有迭代的方法来做到这一点?

function performAction () {
    return Promise.resolve()
        .then(() => {
            return execAsync(arrayItem[0])
        })
        .catch(() => {
            return execAsync(arrayItem[1])
        })
        .catch(() => {
            return execAsync(arrayItem[2])
        })
}

1 个答案:

答案 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的结果解析第一个有效项目。