回答:
ES5のサポートでは、TSからES6へのコンパイルでのみサポートされるため、TypeScript 2.0をasync/ awaitで待機する必要があります。
あなたは遅延関数を作成することができるでしょう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ます。
PromisePromiseをネイティブで利用できないES5にコンパイルする場合は、実装が必要であることを忘れないでください。
await new Promise(resolve => setTimeout(resolve, 1000)).then(()=>console.log("fired"));await new Promise(resolve => setTimeout(()=>resolve(), 1000)).then(()=>console.log("fired"));
async関数でラップします。私は例を追加しました
これは機能します:(コメントのおかげで)
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.
});
とRxJS:
import { timer } from 'rxjs';
// ...
timer(your_delay_in_ms).subscribe(x => { your_action_code_here })
x は0です。
に2番目の引数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秒後にメッセージのうなりを消します。
または、関数を宣言するのではなく、単に:
setTimeout(() => {
console.log('hello');
}, 1000);