当前位置:  开发笔记 > 编程语言 > 正文

是否有返回ES6承诺的setTimeout版本?

如何解决《是否有返回ES6承诺的setTimeout版本?》经验,为你挑选了1个好方法。

与这个问题类似,但我并没有询问承诺如何起作用,我特别想知道:

在返回Promise的东西中包装setTimeout的标准/最佳方法是什么?我在想像Angular的功能,但不是Angular特有的.$timeout



1> Benjamin Gru..:

在浏览器中

首先没有 - 没有内置的.许多增强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; 
}

然后你可以这样做:

delay(1000).then(/* ... do whatever */);

要么

 doSomething().then(function(){ return delay(1000); }).then(doSomethingElse);

如果我们只想要ES2015中的基本功能,它甚至更简单:

let delay = ms => new Promise(r => setTimeout(r, ms));

在节点中

您可以使用util.promisifyon setTimeout来获取delay函数 - 这意味着您不必再使用new Promise构造函数.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有