Javascript 单个解析程序/承诺的多个生产者

Javascript 单个解析程序/承诺的多个生产者,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,在Q文档中有这样一行: “您可以将冲突解决者交给任意数量的制作人,谁先解决承诺谁就赢。此外,除非您也给他们承诺部分,否则任何制作人都无法看到他们输了。” 我真的不明白那是怎么说的。这是用于你手工构建承诺的吗?谁能给我举个例子吗 这是用于你手工构建承诺的吗 确切地说,您可以使用延迟或承诺构造函数创建承诺,多次调用resolve,但只有第一次有效。例如: var p = new Q.Promise(function(resolve){ resolve(1); resolve(2);

在Q文档中有这样一行:

“您可以将冲突解决者交给任意数量的制作人,谁先解决承诺谁就赢。此外,除非您也给他们承诺部分,否则任何制作人都无法看到他们输了。”

我真的不明白那是怎么说的。这是用于你手工构建承诺的吗?谁能给我举个例子吗

这是用于你手工构建承诺的吗

确切地说,您可以使用延迟或承诺构造函数创建承诺,多次调用
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文档中该部分使用的一个术语,我不知道其他地方有类似的用法。从上下文来看,我们理解它的意思是“导致延迟解决或拒绝(即解决)的功能,但不一定是创建延迟解决的功能”。