Javascript 单个解析程序/承诺的多个生产者
在Q文档中有这样一行: “您可以将冲突解决者交给任意数量的制作人,谁先解决承诺谁就赢。此外,除非您也给他们承诺部分,否则任何制作人都无法看到他们输了。” 我真的不明白那是怎么说的。这是用于你手工构建承诺的吗?谁能给我举个例子吗 这是用于你手工构建承诺的吗 确切地说,您可以使用延迟或承诺构造函数创建承诺,多次调用Javascript 单个解析程序/承诺的多个生产者,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,在Q文档中有这样一行: “您可以将冲突解决者交给任意数量的制作人,谁先解决承诺谁就赢。此外,除非您也给他们承诺部分,否则任何制作人都无法看到他们输了。” 我真的不明白那是怎么说的。这是用于你手工构建承诺的吗?谁能给我举个例子吗 这是用于你手工构建承诺的吗 确切地说,您可以使用延迟或承诺构造函数创建承诺,多次调用resolve,但只有第一次有效。例如: var p = new Q.Promise(function(resolve){ resolve(1); resolve(2);
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(tryToGetFromFirstAPI(), tryToGetFromSecondAPI()).then(function(result){
// resolves as soon as the "fastest" resolved, with the result
});
这让您可以构建有趣的东西,例如,让我们构建一个race
函数,该函数返回两个承诺的第一个解析结果(为简洁起见,省略了错误处理):
这将与先准备好的承诺一起解决,例如:
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(tryToGetFromFirstAPI(), tryToGetFromSecondAPI()).then(function(result){
// resolves as soon as the "fastest" resolved, with the result
});
是的,我最近对那句话感到惊讶。不幸的是,为了理解实际含义,您需要已经理解了延期/承诺 对我来说,问题从介绍性的句子开始: 延迟很酷,因为它们将承诺部分与冲突解决程序部分分开。因此: 这是一种误导,因为延迟实际上并没有分离这些组件——更准确的说法是它们组合在一起,但在需要时允许分离 即兴而言,更好的措辞应该是: 延迟[很酷,因为它们]包括派生承诺的方法,以及以可执行方法的形式包含解析或拒绝的方法,所有这些都封装在一个对象中。所以: “你可以向任何数量的消费者做出承诺……”开头的句子有点罗嗦,但在其他方面还行 但以“您可以将解析器提供给任意数量的制作人…”开头的句子最好是: 解析和/或拒绝方法易于分离,例如,允许您将它们传递给任意数量的制作人,以及解析/拒绝第一个的制作人获胜;此外,通过传递分离的方法而不是延迟的方法本身(以及它的承诺),任何制作人都无法观察他们是赢了还是输了。” 第三种说法也可以包括: 延期付款可以全部通过,包括其解决/拒绝和衍生承诺的方法。” 事实上,上述所有功能都可以通过
newpromise(synchronoussetterfunction)
构造和外部var(s)来实现
还应该说,这样的陈述可以被多次审查和改进。我上面的尝试花了我15分钟,所以我不会假装它们是最后一句话。这种行为是A+?蓝鸟和原生生物在这些场景下也会这样做吗?@MadaraUchiha A+只指定promise库之间的互操作性,是的不指定承诺构造函数。承诺构造函数规范和ECMAScript规范都指定了这一点。是的,它们的行为都是一样的。所以提出请求:)?我可以从Q文档拉请求中获得终身职业:-)那么什么是生产者?”生产者“是Q文档中该部分使用的一个术语,我不知道其他地方有类似的用法。从上下文来看,我们理解它的意思是“导致延迟解决或拒绝(即解决)的功能,但不一定是创建延迟解决的功能”。