我可能需要一些关于node.js应用程序的Q promises的帮助。我的用例如下:
我所挣扎的是在找到信息后创建/返回完成的承诺。
像(伪代码):
var deferred = Q.defer(id)
foreach repo in repositories {
var p = repo.findById(id)
.then deferred.resolve(order)
p.waitForThePromiseToFinish
if (p.success) break
}
如何实现这一点?任何帮助表示赞赏。
答案 0 :(得分:1)
非常类似于您的伪代码,除非我们使用可执行链接,因为操作是异步的:
var p = Promise.resolve(); // start empty promise;
repositories.forEach(function(repo){
p = p.then(function(result){ // chain
if(result.success) return result; // assumes that result.success is true if good
return repo.findById(id); // call find by Id
});
});
这将解析为将成为第一个成功的存储库的承诺p
,或者如果全部失败则拒绝承诺 - 请注意,这假设您的findById
API使得它返回一个值成功查找result.success === true
,否则result.success === false
。如果您在实际API中遇到问题或者遇到问题,请告诉我。玩得开心:))