我的项目中有一个复杂的ajax调用树。我想使用Promise
,es6的新功能远离回调地狱。
很难描述整个调用树,所以我做了一个简单的例子来模拟它: promise tree - jsfiddle
在示例中,很容易告诉我使用then
遇到Promise
地狱,你可以想象如果树不断增长,就无法理解它并修改它。
在这里,我尝试解决这个问题,但我失败了:promise try failed - jsfiddle
而且,我已经阅读了关于Promise
的一些内容,但我认为诺言链不会解决这个问题。我是否误解了承诺链的使用?
请帮助我,谢谢!
答案 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!