承诺良好实践

时间:2017-03-10 16:25:32

标签: javascript promise bluebird

快速提问。

对于复杂的Promise函数,最好像这样组织代码:

一个独特的功能,每个功能旁边的功能最小

var a = () => {
    return new Promise((resolve, reject) => {
        return promise1().then((result1) => {
            return promise2(result1)
        }).then((result2) => {
            return promise3(result2)
        }).then((result3) => {
            return promise4(result3)
        }).then((result4) => {
            resolve(result4)
        }).catch((error) => {
            reject(error)
    })
}

或者像这样

将一些复杂性封装到其他函数中以获得更简单的高级函数。

var b = () => {
    return new Promise((resolve, reject) => {
        return promise12().then((result12) => {
            return promise34(result12)
        }).then((result4) => {
            resolve(result4)
        }).catch((error) => {
            reject(error)
        })
    })
}

var promise12 = () => {
    return new Promise ((resolve, reject) => {
        return promise1().then((result1) => {
            return promise2(result1)
        }).then((result2) => {
            resolve(result2)
        }).catch((error) => {
            reject(error)
        })
    })
}

var promise34 = (result2) => {
    return new Promise ((resolve, reject) => {
        return promise3().then((result3) => {
            return promise4(result4)
        }).then((result) => {
            resolve(result4)
        }).catch((error) => {
            reject(error)
        })
    })
}

1 个答案:

答案 0 :(得分:2)

组织代码没有“最好的方法”。您应该考虑将您的功能分成逻辑模块,以便它们的使用是“直观的”。

此外,您还没有提到generators(旁边有*的功能),这是一个新的JavaScript ES6功能。很可能在将来这些生成器函数将成为处理异步代码的“事实上”的方式,因为它们设计得很好,可以处理它。它们也易于阅读和测试。您可以通过Max Stoiber观看此(目前)free course以了解有关它们的更多信息。本课程专门用于说明如何使用生成器函数编写异步代码。