回答:
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
ます。
Promise
Promiseをネイティブで利用できない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);