【发布时间】:2015-04-02 14:39:04
【问题描述】:
我想我可能对承诺过于看中了。我有一组鹅,在返回最终值之前,我想执行任意数量的操作。我发现在第一个 return 语句之后,链条就断了。如果我的集合有 10 个项目,则恰好有 10 个项目将放置在数据库中,但是当我尝试从下面的“return Q.all(promises)”语句构建我的 API 响应时,我得到空值。
为了测试,我在第一个之后触发的 promise 中放入了一个 console.log 语句,并在我的 expressjs 路由中放入了一个 console.log ,它期待有关 geese 的详细信息。 API 响应总是首先完成“[null, null]”,然后最终我获得链中第二个和第三个承诺的条目。
我是如何创建这种竞争条件的,我该如何解决?
var promises = geese.map(function(goose) {
determineGooseType(goose.details)
.then(function(type) {
return recordNewGooseType(type)
})
.then(function(dbInsertResult) {
we never really got here!
})
.catch(function(err) {
log some stuff
});
}
return Q.all(promises);
【问题讨论】:
-
有点题外话,但您的第一个回调可以缩短为
.then(recordNewGooseType)