我的project.And中有一个复杂的ajax调用树,我想使用Promise,这是es6的新特性,可以从地狱回调中逃脱。
很难描述整个调用树,所以我做了一个简单的例子来模拟它:promise tree - jsfiddle
在这个示例中,很容易看出我使用Promise遇到了then地狱,您可以想象如果树一直在增长,就不可能理解和修改它。
在这里,我尝试解决这个问题,但失败了:promise try failed - jsfiddle
另外,我读过一些关于Promise的文章,但我认为promise chain不会解决这个problem.Am我误解了promise chain的用法?
请帮帮我,谢谢!
发布于 2016-03-15 03:09:19
首先,@Bergi的回答很正确:
看起来像条件树而不是promise树的
。你不能真的避免嵌套来进行分支。
-- Bergi
我喜欢使用Promises的方式是使用一个库,它接受一个生成器函数,并将其包装为具有promises的良好行为:
而不是:
task1().then(function (result) {
// do something...
})您可以执行如下操作(下面使用库co):
co(function * () {
try {
let result = yield task1()
} catch (e) {
// handle errors
}
})下面是转换为使用生成器函数的示例(JSBin不支持co,所以我使用Q.spawn Q是promise库):https://jsbin.com/gicicinawe/1/edit?js,output
笔记
这假设您的目标JavaScript运行时支持生成器函数。Currently, only Firefox and Chrome support generator functions。
进一步阅读
想现在使用它并保持与所有当前浏览器的兼容性吗?
那就用Babel吧!
https://stackoverflow.com/questions/35984063
复制相似问题