我正在用TypeScript在Angular 2中开发一个网站,我想知道是否有一种方法可以实现thread.sleep(ms)功能。
我的用例是在几秒钟后提交表单后重定向用户,这在JavaScript中非常容易,但我不确定如何在TypeScript中做到这一点。
我正在用TypeScript在Angular 2中开发一个网站,我想知道是否有一种方法可以实现thread.sleep(ms)功能。
我的用例是在几秒钟后提交表单后重定向用户,这在JavaScript中非常容易,但我不确定如何在TypeScript中做到这一点。
当前回答
你也可以使用RxJS:
import { of } from 'rxjs';
import { delay } from 'rxjs/operators';
async yourFunction() {
yourCode;
await this.delay(5000);
yourCode;
}
delay(ms: number): Promise<any> {
const dummyObservable = of();
return dummyObservable.pipe(delay(ms)).toPromise();
}
其他回答
你也可以使用RxJS:
import { of } from 'rxjs';
import { delay } from 'rxjs/operators';
async yourFunction() {
yourCode;
await this.delay(5000);
yourCode;
}
delay(ms: number): Promise<any> {
const dummyObservable = of();
return dummyObservable.pipe(delay(ms)).toPromise();
}
如果你正在使用angar5及以上版本,请在你的ts文件中包含下面的方法。
async delay(ms: number) {
await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
}
然后在任何需要的地方调用delay()方法。
e.g:
validateInputValues() {
if (null == this.id|| this.id== "") {
this.messageService.add(
{severity: 'error', summary: 'ID is Required.'});
this.delay(3000).then(any => {
this.messageService.clear();
});
}
}
这将消失的消息咆哮3秒后。
或者不声明一个函数,简单地说:
setTimeout(() => {
console.log('hello');
}, 1000);
出于某种原因,上述接受的答案在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.
});
import { timer } from 'rxjs';
import { take } from 'rxjs/operators';
await timer(1000).pipe(take(1)).toPromise();
这个比较适合我