Chrome中的JavaScriptPromise/延迟

JavaScript Promise/Defer in Chrome

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

Q中有defer函数,可用于创建将来无法解决或拒绝的未兑现Promise。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);

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


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

您可以执行以下操作:

1
2
3
4
5
6
7
8
var defer = function() {
    var result = {};
    result.promise = new Promise(function(resolve, reject) {
        result.resolve = resolve;
        result.reject = reject;
    });
    return result;
};

首先,设计缺陷是这样做的,如果您使用的是Q,那么原生Promise就没用了。


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