Q Promises:如何顺序尝试多个注册中心

Q Promises: how to sequentially try multiple registries

我可能需要一些关于 node.js 应用程序的 Q promises 的帮助。我的用例如下:

我正在努力的是 create/return 找到信息后完成的承诺。

类似于(伪代码):

var deferred = Q.defer(id)
foreach repo in repositories {
    var p = repo.findById(id)
               .then deferred.resolve(order)
    p.waitForThePromiseToFinish
    if (p.success) break 
}

知道如何实现这个吗?感谢任何帮助。

很像你的伪代码,除了我们使用 thenable 链接,因为操作是异步的:

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 是这样的它 returns 在成功找到时具有 result.success === true 的值,否则 result.success === false 。如果您在根据实际 API 进行调整时遇到问题,或者遇到问题,请告诉我。玩得开心:)