我使用支持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);
我很好奇这个解决方案中存在任何设计缺陷,例如性能下降或不正确。
答案 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倾向于对延迟进行基准测试。"