JavaScript中的JavaScript承诺/延迟

sha*_*are 14 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);
Run Code Online (Sandbox Code Playgroud)

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

Esa*_*ija 16

您正在创建不必要的函数对象.

你可以这样做:

var defer = function() {
    var result = {};
    result.promise = new Promise(function(resolve, reject) {
        result.resolve = resolve;
        result.reject = reject;
    });
    return result;
};
Run Code Online (Sandbox Code Playgroud)

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

  • "本土承诺毫无用处" - 为什么?难道不会期望更好的优化等吗? (2认同)
  • 首先承诺perf在客户端是无用的,其次本机承诺非常慢(与几乎所有其他本机实现相比,慢于用户实现).第三,ES6承诺功能非常少,几乎无法在开箱即用的真实项目中使用. (2认同)

lla*_*bda 5

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

  • 2015年的更新? (2认同)