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

我的用例是在几秒钟后提交表单后重定向用户,这在JavaScript中非常容易,但我不确定如何在TypeScript中做到这一点。


当前回答

在ES6中正确的方法是

import { setTimeout } from 'timers/promises';

await setTimeout(5000);

它现在是本地节点方法。https://nodejs.org/api/timers.html

其他回答

这是有效的:(感谢评论)

setTimeout(() => 
{
    this.router.navigate(['/']);
},
5000);

出于某种原因,上述接受的答案在Angular (V6)的新版本中不起作用。

为此使用这个..

async delay(ms: number) {
    await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
}

以上对我来说很管用。

用法:

this.delay(3000);

或者更准确的说法

this.delay(3000).then(any=>{
     //your task after delay.
});

或者不声明一个函数,简单地说:

setTimeout(() => {
    console.log('hello');
}, 1000);

RxJS:

import { timer } from 'rxjs';

// ...

timer(your_delay_in_ms).subscribe(x => { your_action_code_here })

X = 0。

如果你给timer第二个参数period,每一周期毫秒就会产生一个新的数字(x = 0然后x = 1, x = 2,…)

详见官方文档。

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

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

这个比较适合我