Mic*_*pat 35 javascript promise ecmascript-6 es6-promise
与这个问题类似,但我并没有询问承诺如何起作用,我特别想知道:
在返回Promise的东西中包装setTimeout的标准/最佳方法是什么?我在想像Angular的功能,但不是Angular特有的.$timeout
Ben*_*aum 49
首先没有 - 没有内置的.许多增强ES2015的图书馆承诺像蓝鸟一样鞭打它.
我认为另一个答案会混淆执行函数和延迟,它还会产生无法取消的超时.我把它写成:
function delay(ms){
var ctr, rej, p = new Promise(function (resolve, reject) {
ctr = setTimeout(resolve, ms);
rej = reject;
});
p.cancel = function(){ clearTimeout(ctr); rej(Error("Cancelled"))};
return p;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
delay(1000).then(/* ... do whatever */);
Run Code Online (Sandbox Code Playgroud)
要么
doSomething().then(function(){ return delay(1000); }).then(doSomethingElse);
Run Code Online (Sandbox Code Playgroud)
如果我们只想要ES2015中的基本功能,它甚至更简单:
let delay = ms => new Promise(r => setTimeout(r, ms));
Run Code Online (Sandbox Code Playgroud)
您可以使用util.promisifyon setTimeout来获取delay函数 - 这意味着您不必再使用new Promise构造函数.