【发布时间】:2015-10-18 07:04:34
【问题描述】:
在使用 Javascript 承诺时,我遇到了这种奇怪的行为。考虑以下代码:
var Q = require('q');
var d1 = Q.defer();
var d2 = Q.defer();
compare(d1.promise, d2.promise);
d1.resolve(3);
d2.resolve(3);
function compare(a, b) {
Q.all([a,b]).then(function(results) {
console.log('a: ' + a + ' b: ' + b);
var result = (a == b)? 1: -1;
console.log(result);
});
}
当您运行此代码时,您会得到 -1。我意识到到那时我没有评估传递给匿名函数的结果变量(我应该这样做)。我的具体问题是这样的:
如果您使用大于 (>) 或小于 (
所以奇怪的行为是 == 在承诺方面的行为与 不同。似乎小于 () 在某种程度上具有等待 Promise 的结果的特殊能力,而相等运算符 (==, ===) 则没有。
谁能解释这种行为?
【问题讨论】:
-
不,
</>不要等待承诺的结果。 你做到了,通过使用Q.all和then回调。只有到那时,.valueOf才会给出相应的结果 - 有关详细信息,请参阅 @FelixKling 的答案。
标签: javascript promise comparison q