基本:Promiseとasync/await
function delay(ms: number) { return new Promise(r => setTimeout(r, ms)); }
async function main() {
await delay(500);
return 'done';
}ベストマッチ
最短で課題解決する一冊
この記事の内容と高い親和性が確認できたベストマッチです。早めにチェックしておきましょう。
直列と並列
// 直列
await a();
await b();
// 並列
await Promise.all([a(), b()]);さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
エラーハンドリング
try { await mightFail(); }
catch (e) { console.error('oops', e); }さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
タイムアウトと再試行
async function withTimeout<T>(p: Promise<T>, ms = 1000) {
const t = new Promise<never>((_, rej) => setTimeout(() => rej(new Error('timeout')), ms));
return Promise.race([p, t]);
}
async function retry<T>(fn: () => Promise<T>, times = 2) {
let e; for (let i=0;i<=times;i++) { try { return await fn(); } catch (err) { e = err; } }
throw e;
}さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
よくある落とし穴
forEach(async ...)は待たない →for..oforPromise.all- 例外を握りつぶさない →
returnかthrowを忘れない - 余計な
awaitで並列性を失わない
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
まとめ
直列/並列/失敗時のパターンを覚えると、非同期は怖くありません。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
この記事をシェア

![[作って学ぶ]ブラウザのしくみ──HTTP、HTML、CSS、JavaScriptの裏側 (WEB+DB PRESS plusシリーズ)](https://m.media-amazon.com/images/I/41upB6FsPxL._SL500_.jpg)
