我使用支持Promise规范的Q库。但我也尝试使用不久前在Chrome中实现的Promise类(实验)。Chrome中的JavaScript Promise/Defer
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);
我很好奇这个解决方案中是否有任何设计缺陷,如性能下降或不正确。
“原生承诺无用” - 为什么?难道不会有人期待更好的优化等吗? – Bergi
首先承诺perf在客户端是没用的,其次原生承诺非常慢(几乎所有其他本地实现比用户实现都慢)。第三,ES6承诺的功能非常少,几乎不可用于开箱即用的实际项目。 – Esailija
@Bergi iirc此刻的本土承诺比Q承诺快,但比Bluebird的承诺要慢 - 这确实不像Petka所说的那样。更麻烦的部分是,他们有比蓝鸟承诺更糟糕的堆栈痕迹:D –