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会倾向于对延迟进行基准测试。"