javascript - 单个解析器/ promise 的多个生产者

标签 javascript node.js promise q

在 Q 文档中有这一行:

“您可以将解析器提供给任意数量的生产者,谁先解决了 promise ,谁就赢了。此外,除非您也将 promise 部分也给了生产者,否则没有生产者会观察到他们输了。”

我真的不明白那是什么意思。这是在您手动构建 promise 时使用的吗?有人可以给我举个例子吗?

最佳答案

Is this for when you are constructing a promise by hand?

确切地说,您可以使用 deferred 或 promise 构造函数创建一个 promise,多次调用 resolve 但只有第一次有效。例如:

var p = new Q.Promise(function(resolve){
    resolve(1);
    resolve(2);
    resolve(3);
    resolve(4);
    resolve(5); // can also pass `resolve` around.
});

p.then(function(result){
    // always 1, all other calls had no effect.
});

这让您可以构建有趣的东西,例如,让我们构建一个 race 函数,它返回第一个解决两个 promise 的结果(为简洁起见省略了错误处理):

function race(p1, p2){
    return new Promise(function(resolve){
        p1.then(resolve);
        p2.then(resolve);
    });
}

哪个 promise 会先准备好,例如:

race(tryToGetFromFirstAPI(), tryToGetFromSecondAPI()).then(function(result){
   // resolves as soon as the "fastest" resolved, with the result
});

关于javascript - 单个解析器/ promise 的多个生产者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32296810/

相关文章:

javascript - 不同的 ul 元素在水平移动的 div 中重叠

javascript - 将新数据从 JSON 添加到现有表

node.js - Express-session 和 express-socket.io-session 在 angular2/typescript 环境中不工作

javascript - 链式 promise - 正确的方法

javascript - FIREBASE admin sdk 不返回 promise ? Node JS

javascript - 如何滚动到 <div> 内的特定文本索引

javascript - 带有背景图像的 jQuery 淡入

node.js - Nodejs 表达 try-catch 与 then catch

javascript - EventDrops for D3.js(来自 marmelab) - 如何调整示例代码?

javascript - Angular 异步调用的计时问题