Javascriptに非同期関数があり、それにsetTimeoutを追加しました。コードは次のようになります。
let timer;
clearTimeout(timer);
timer =setTimeout(() => {
(async() => {
await this._doSomething();
})();
}, 2000);
SetTimeoutの目的は、関数が実行される前に2秒を追加することです。ユーザーが入力を停止したことを確認することです。
とにかくsetTimeoutは非同期なので、この関数からasync/awaitを削除する必要がありますか?
setTimeout
は遅延を追加しますbefore関数呼び出しに対して、async
/await
はpromiseの上にある構文糖衣です。実行するコードをチェーンする方法after呼び出しが完了するので、再異なる。
setTimeoutにはひどいエラー処理特性があるため、すべてのコードで次のことをお勧めします。
let wait = ms => new Promise(resolve => setTimeout(resolve, ms));
そして、再びsetTimeout
を直接呼び出さないでください。
コードは次のようになります。
let foo = async () => {
await wait(2000);
await this._doSomething();
}
foo
がdoSomething
の終了を待つことを除きます。これは通常望ましいことですが、コンテキストがなければ、何が欲しいのかを知るのは困難です。 doSomething
を他のコードと並行して実行したい場合、以下をお勧めします。
async () => { await Promise.all([foo(), this._otherCode()]); };
同じ場所でエラーを結合してキャプチャします。
本当に発射して忘れるつもりだった場合は_doSomething
そしてそれを待たずに、await
を失う可能性がありますが、エラーを試す/キャッチする必要があります:
async () => {
let spinoff = async () => { try { await foo(); } catch (e) { console.log(e); } };
spinoff(); // no await!
}
しかし、そのパターンは微妙で見逃しやすいのでお勧めしません。