如何在 TypeScript 中实现睡眠功能?

新手上路,请多包涵

我正在使用 TypeScript 在 Angular 2 中开发一个网站,我想知道是否有办法实现 thread.sleep(ms) 功能。

我的用例是在几秒钟后提交表单后重定向用户,这在 JavaScript 中非常容易,但我不确定如何在 TypeScript 中执行此操作。

原文由 kha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

您必须等待带有 async / await 的 TypeScript 2.0 支持 ES5,因为它现在仅支持 TS 到 ES6 的编译。

您可以使用 async 创建延迟功能:

 function delay(ms: number) {
    return new Promise( resolve => setTimeout(resolve, ms) );
}

并称它为

await delay(1000);

顺便说一句,您可以直接在 Promise 上等待:

 await new Promise(f => setTimeout(f, 1000));

请注意,您只能在 async 函数中使用 await

如果你不能( _假设你正在构建 nodejs 应用程序_),只需将你的代码放在匿名 async 函数中。这是一个例子:

     (async () => {
        // Do something before delay
        console.log('before delay')

        await delay(1000);

        // Do something after
        console.log('after delay')
    })();

示例 TS 应用程序: https ://github.com/v-andrew/ts-template

在 OLD JS 中你必须使用

setTimeout(YourFunctionName, Milliseconds);

或者

setTimeout( () => { /*Your Code*/ }, Milliseconds );

但是,随着每个主要浏览器都支持 async / await 它不太有用。

更新:TypeScript 2.1 在这里带有 async/await

只是不要忘记,当您编译到 ES5 时,您需要 Promise 实现,而 Promise 在本机不可用。

附言

如果要在原始文件之外使用该函数,则必须 导出该函数

原文由 v-andrew 发布,翻译遵循 CC BY-SA 4.0 许可协议

import { timer } from 'rxjs';
import { take } from 'rxjs/operators';

await timer(1000).pipe(take(1)).toPromise();

这对我来说效果更好

原文由 FabioStein 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进