【发布时间】:2015-12-27 11:20:43
【问题描述】:
现在通常不鼓励创建延迟对象,而倾向于使用 ES6 风格的 Promise 构造函数。是否存在有必要(或以某种方式更好)使用延迟的情况?
例如,在this page 上,给出以下示例作为使用延迟的理由:
function delay(ms) {
var deferred = Promise.pending();
setTimeout(function(){
deferred.resolve();
}, ms);
return deferred.promise;
}
但是,这也可以使用 Promise 构造函数来完成:
function delay(ms) {
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve();
}, ms);
});
}
【问题讨论】:
-
使用 promise 构造函数的情况也非常少见。物有所值。
-
正如 Benjamin Gruenbaum 所说,您甚至很少需要使用
new Promise。你上面的例子就是一个很好的例子。解析为undefined的延迟承诺不是很有用。您通常希望延迟现有的承诺,例如somPromise.delay(t).then(...),在这种情况下,您的延迟不会产生新的承诺。如果你需要在没有 Promise 的地方启动 Promise 链,你可以简单地使用Promise.resolve或Promise.reject -
function() { resolve(); }在这种情况下等同于resolve。 -
@caasjj 对于某些 Promise 实现确实如此,但并非所有实现都提供
.delay()-type 方法。 ES6 原生 Promise 肯定不会。
标签: javascript promise ecmascript-6 bluebird es6-promise