Answers:
您必须等待带有async
/的TypeScript 2.0 await
才能获得ES5支持,因为它现在仅支持从TS到ES6编译。
您将可以使用创建延迟功能async
:
function delay(ms: number) {
return new Promise( resolve => setTimeout(resolve, ms) );
}
并称之为
await delay(300);
请注意,您只能使用await
内部async
函数。
如果不能(假设您正在构建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
。
只是不要忘了,Promise
当您编译到ES5时(在Promise本身不可用的情况下),您需要实现。
await new Promise(resolve => setTimeout(resolve, 1000)).then(()=>console.log("fired"));
,但这个工作await new Promise(resolve => setTimeout(()=>resolve(), 1000)).then(()=>console.log("fired"));
async
函数中。我添加了示例
由于某种原因,以上接受的答案在新版本的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.
});
与RxJS
:
import { timer } from 'rxjs';
// ...
timer(your_delay_in_ms).subscribe(x => { your_action_code_here })
x
是0。
如果提供一个第二个参数period
到timer
,一个新的数将被发射的各period
毫秒(X = 0,则x = 1,X = 2,...)。
有关更多详细信息,请参见官方文档。
如果您使用的是angular5及更高版本,请在ts文件中包括以下方法。
async delay(ms: number) {
await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
}
然后在任意位置调用此delay()方法。
例如:
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秒后消失,并发出咆哮声。