在 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/