如何理解es6 promise树

时间:2016-03-14 09:43:12

标签: ajax promise ecmascript-6

我的项目中有一个复杂的ajax调用树。我想使用Promise,es6的新功能远离回调地狱。

很难描述整个调用树,所以我做了一个简单的例子来模拟它: promise tree - jsfiddle

在示例中,很容易告诉我使用then遇到Promise地狱,你可以想象如果树不断增长,就无法理解它并修改它。

在这里,我尝试解决这个问题,但我失败了:promise try failed - jsfiddle

而且,我已经阅读了关于Promise的一些内容,但我认为诺言链不会解决这个问题。我是否误解了承诺链的使用?

请帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

首先,@ Bergi的回答是:

  

看起来像条件​​树而不是承诺树。你无法真正避免嵌套用于分支。

     

- Bergi

我喜欢使用Promises的方法是使用一个带有生成器函数的库,并使用它来包装它以表现得很好:

而不是:

task1().then(function (result) {
    // do something...
})

您执行类似操作(以下使用库co):

co(function * () {
    try {
        let result = yield task1()
    } catch (e) {
        // handle errors
    }
})

以下是使用生成器函数转换为示例的示例(JSBin不支持co所以我使用Q.spawn [Q是一个承诺库]):https://jsbin.com/gicicinawe/1/edit?js,output

备注

这假定您的目标JavaScript运行时支持生成器函数。 Currently, only Firefox and Chrome support generator functions

进一步阅读

现在想要使用它并保持与所有当前浏览器的兼容性吗?

然后使用Babel