【发布时间】:2017-04-09 05:08:32
【问题描述】:
我正在使用链来控制流程,无法在step2() 中获取 promise.map 以等待它生成的所有承诺都得到解决。
这是我试图实现的流程的视觉效果。
step1()
step2()
step2()
step2()
step2()
step3()
在step2() 我使用的是 Bluebird 的 promise.map。
这是链条:
step1()
.then(function() { return step2() })
.then(function() { return step3() })
.catch(function() { // handle errors })
这是我每个步骤的功能:
let step1 = function() {
return new Promise(function(resolve, reject) {
// do stuff
resolve()
})
}
let step2 = function() {
return new Promise(function(resolve, reject) {
things = []
return Promise.map(things, function(thing) {
// load file async with callback
})
resolve()
})
}
let step3 = function() {
return new Promise(function(resolve, reject) {
// do stuff
resolve()
})
}
我已经用timeout 测试了更多步骤的链,除了step2() 中的promise.map 之外,它按预期工作。我究竟做错了什么? :)
【问题讨论】:
-
在
step2中对resolve()的调用无法访问。return有效地停止执行您的代码,因此它之后的任何代码都不会被执行。
标签: javascript node.js asynchronous promise bluebird