JavaScript中的JavaScript承诺/延迟

时间:2014-02-08 23:11:15

标签: javascript google-chrome promise q

我使用支持Promise规范的Q库。但我也尝试使用不久前在Chrome中实现的Promise类(实验性的)。

Q中的延迟功能可用于创建未履行的承诺,可以在将来解决或拒绝。

我使用Chrome中提供的原生Promise实现了相同的功能。这是一个例子:

var defer = function() {
    var result = {};
    result.promise = new Promise(function(resolve, reject) {
        result.resolve = function(value) {
            resolve(value);
        };
        result.reject = function(value) {
            reject(value);
        };
    });
    return result;
};

var deferred = defer();
deferred.promise.then(function(value) {
    alert(value);
});
deferred.resolve(10);

我很好奇这个解决方案中存在任何设计缺陷,例如性能下降或不正确。

2 个答案:

答案 0 :(得分:16)

您正在创建不必要的功能对象。

你可以这样做:

var defer = function() {
    var result = {};
    result.promise = new Promise(function(resolve, reject) {
        result.resolve = resolve;
        result.reject = reject;
    });
    return result;
};

设计缺陷首先是这样做,如果你使用Q,本机承诺是无用的。

答案 1 :(得分:5)

有关基准,请参阅http://bluebirdjs.com/docs/benchmarks.html。还有一些JSPerf基准测试,但是对于合理快速的承诺实现,延迟将由所使用的调度程序完全确定,因此对基准测试不感兴趣。基准承诺的JSPerfs倾向于对延迟进行基准测试。"