【Node.js24.x】Promise::withResolvers()メソッドの使い方
withResolversメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
withResolversメソッドは、PromiseインスタンスとそのPromiseを解決(resolve)または拒否(reject)するための関数を同時に取得するメソッドです。
このメソッドは、promise、resolve、rejectという3つのプロパティを持つオブジェクトを返します。返されるpromiseプロパティには通常のPromiseインスタンスが含まれており、resolveプロパティの関数を呼び出すことでそのPromiseを成功状態に、rejectプロパティの関数を呼び出すことで失敗状態に移行させることができます。
従来のPromiseコンストラクタでは、解決関数と拒否関数はコンストラクタに渡すコールバック関数内部でのみ直接利用可能でした。しかし、withResolversメソッドを用いることで、これらのPromiseの状態を制御する関数をPromiseインスタンスと同時に外部へ公開し、コードの別の場所からPromiseの状態を操作できるようになります。
これにより、非同期処理のフロー制御をより柔軟に行うことが可能となり、例えば、特定のイベント発生や外部からの入力に応じてPromiseを解決または拒否したいといったシナリオにおいて、コードの記述が簡潔になります。Promiseの状態を外部から管理したい場合に特に有用であり、非同期処理の連携をスムーズにするための、Node.js 24で導入された便利な機能です。システムエンジニアを目指す初心者の方にとって、非同期処理の設計をより理解しやすくする助けとなるでしょう。
構文(syntax)
1const { promise, resolve, reject } = Promise.withResolvers(); 2 3// 例: resolve() または reject() を非同期的に呼び出す 4// ここでは setTimeout を使用していますが、APIコールやイベント処理など、 5// Promiseの外部で解決・拒否を制御したい様々な非同期処理で利用できます。 6setTimeout(() => { 7 const success = Math.random() > 0.5; 8 if (success) { 9 resolve("操作が成功しました。"); 10 } else { 11 reject(new Error("操作が失敗しました。")); 12 } 13}, 1000); 14 15// 生成されたPromiseを通常通り利用 16promise 17 .then((message) => { 18 console.log("成功:", message); 19 }) 20 .catch((error) => { 21 console.error("エラー:", error.message); 22 });
引数(parameters)
引数なし
引数はありません
戻り値(return)
{ promise: Promise<any>, resolve: (value: any | PromiseLike<any>) => void, reject: (reason?: any) => void }
このメソッドは、新しいPromiseとそのPromiseを解決(resolve)または拒否(reject)するための関数をセットにしたオブジェクトを返します。