我正在用TypeScript在Angular 2中开发一个网站,我想知道是否有一种方法可以实现thread.sleep(ms)功能。
我的用例是在几秒钟后提交表单后重定向用户,这在JavaScript中非常容易,但我不确定如何在TypeScript中做到这一点。
我正在用TypeScript在Angular 2中开发一个网站,我想知道是否有一种方法可以实现thread.sleep(ms)功能。
我的用例是在几秒钟后提交表单后重定向用户,这在JavaScript中非常容易,但我不确定如何在TypeScript中做到这一点。
当前回答
如果你正在使用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(() =>
{
this.router.navigate(['/']);
},
5000);
或者不声明一个函数,简单地说:
setTimeout(() => {
console.log('hello');
}, 1000);
你必须等待带有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 () => {
// 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);
or
setTimeout( () => { /*Your Code*/ }, Milliseconds );
然而,由于每个主流浏览器都支持async/await,所以它就不那么有用了。
更新: TypeScript 2.1带有async/await。
不要忘记,当你编译到ES5时,你需要Promise实现,而在ES5中,Promise并不是本地可用的。
PS
如果您想在原始文件之外使用该函数,则必须导出该函数。
在ES6中正确的方法是
import { setTimeout } from 'timers/promises';
await setTimeout(5000);
它现在是本地节点方法。https://nodejs.org/api/timers.html
你也可以使用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();
}