JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

条件に応じてPromiseを解決・拒否する関数の実装方法【JavaScript】

JavaScriptでは、ネットワークリクエストのような非同期処理を模倣した関数を実装したい場面があります。そのようなケースでは、指定した時間が経過した後にタスクを実行できるsetTimeout()関数が便利です。

本記事では、リクエストが成功すればPromiseを解決(resolve)し、失敗すれば拒否(reject)する関数の実装方法を、具体的なコード例とともに解説します。

実装例

以下のコードでは、2つの数値の合計が期待値と一致するかどうかを判定し、その結果に応じてPromiseを解決または拒否しています。

const num1 = 45, num2 = 48;
const res = 93;
const expectedSumToBe = (num1, num2, res) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if(num1 + num2 === res){
                resolve('success');
            }else{
                reject('failure');
            };
        }, 3000);
    });
};
expectedSumToBe(num1, num2, res).then((data) => {
    console.log(data);
}).catch((err) => {
    console.log(err);
})
expectedSumToBe(23, 56, 76).then((data) => {
    console.log(data);
}).catch((err) => {
    console.log(err);
})

コードの解説

expectedSumToBe関数は、新しいPromiseオブジェクトを返します。Promiseの内部ではsetTimeout()を使って3秒(3000ミリ秒)後に判定処理を実行し、引数num1とnum2の合計がresと一致する場合は「success」という文字列でPromiseを解決し、一致しない場合は「failure」で拒否します。

呼び出し側では.then()メソッドで成功時の結果を受け取り、.catch()メソッドで失敗時の結果を処理しています。

出力結果

コンソールには以下のように出力されます。

success
failure

最初の呼び出しでは 45 + 48 = 93 となり期待値と一致するため「success」が出力され、2回目の呼び出しでは 23 + 56 = 79 となり期待値の76と一致しないため「failure」が出力されます。


  1. JavaScriptのWeakSetとは?特徴と主要メソッド、サンプルコードをわかりやすく解説

    JavaScriptのWeakSet(ウィークセット)は、オブジェクトを格納するためのコレクションです。Setと同様に、同じオブジェクトを重複して保存することはできません。WeakSetの主な特徴弱い参照で保持する:WeakSet内のオブジェクトへの参照が他に存在しなくなると、ガベージコレクションによって自動的にメモリから解放されます。そのため、メモリリークを防ぎたい場面で役立ちます。オブジェクトのみ格納可能:数値や文字列などのプリミティブ値は追加できません。列挙できない:Setのようなsizeプロパティや反復処理の仕組みを持たず、格納されている要素の一覧を取得することはできません。WeakS

  2. JavaScriptのPromiseとは?非同期処理の基本をわかりやすく解説

    JavaScriptのPromiseとは?Promise(プロミス)は、JavaScriptで非同期処理を扱うためのオブジェクトです。Promiseが生成された時点では、最終的な結果の値はまだ確定していません。処理が完了した将来のタイミングで、成功または失敗の結果を受け取ることができます。これにより、APIからのデータ取得やファイル読み込みなど、時間のかかる処理を効率的に記述できます。Promiseの3つの状態Promiseは、必ず以下の3つの状態のいずれかを持ちます。pending(待機):初期状態。処理がまだ完了していない状態です。fulfilled(履行):処理が正常に完了し、結果の値が