コールバックベースのAPIをPromise化する
// ── Promise の基本: 非同期処理の「約束」を作る ────────
// new Promise((resolve, reject) => {...})
// resolve: 成功時に呼ぶ関数
// reject: 失敗時に呼ぶ関数
const wait = (ms: number) => new Promise<void>((resolve) => {
setTimeout(resolve, ms); // ms ミリ秒後に成功
});
// ── then/catch/finally でチェーン ────────────────────
wait(1000) // 1秒待つ
.then(() => {
console.log('1秒後に実行'); // 成功したら実行
return '次の値';
})
.then(val => console.log(val)) // '次の値'
.catch(error => {
console.error('エラー:', error); // 失敗したら実行
})
.finally(() => {
console.log('成否に関わらず実行'); // 必ず実行
});
// ── async/await で同じことをシンプルに書ける ──────────
async function main() {
try {
await wait(1000);
console.log('1秒後に実行');
} catch (error) {
console.error('エラー:', error);
} finally {
console.log('成否に関わらず実行');
}
}
// ── 即時解決・拒否 ─────────────────────────────────
Promise.resolve('すぐに成功'); // 即座に解決済みの Promise
Promise.reject(new Error('失敗')); // 即座に拒否済みの PromiseNode.jsのutil.promisifyを使うとコールバックAPIを自動でPromise化できる。手動でPromiseを作る場合はrejectを必ず実装する。