[ウェブ]約束は、ネットワークのタイムアウト機能の終了要求のパッケージを使用してフェッチ

:より転載https://www.jianshu.com/p/d66421c826ae

この参照はする高度なガイドを取得します

起源

フェッチ要求がタイムアウトメカニズムネットワークではなく、またメカニズムについて。
日々の開発プロセスは、要求タイムアウトでなく、不要なネットワーク要求をタイムリーに終了を処理するようにしてください。
そこで、我々は達成するために、独自のパッケージを取得する必要があります。

実現

Promise.race(promise1、promise2、...)メソッドはプロミスオブジェクトを返し、限りパラメータはプロミスの解決のいずれか、または拒否されたように、プロミス解決外であっても又は同じ値で拒否されます。

インポートは、コンポーネント{から} REACT」反応; 

/ * * 
 フェッチパッケージを使用して*プロミス、ネットワーク・タイムアウトを有する、機能を終了させる要求
 * / 
クラスNETUTILコンポーネント{延び

    静的baseUrlにし =「:// XXXX:81 / API / HTTP」; 
    静的トークン = '' ; 

    / * * 
     * POSTリクエスト
     * URL:要求アドレス
     ・データ:パラメータ(JSONオブジェクト)
     :*コールバックコールバック関数
     * * / 
    (URL、メソッド、paramsは静的fetch_request '=' {)
        LETヘッダ = {
            「受け入れる」:「ファイルアプリケーション/ JSON」「タイプのコンテンツ」:「ファイルアプリケーション/ JSON。文字セット= UTF-8' 'accesstoken' :NetUtil.tokenは、
        } 
        約束しましょう = nullをもし(paramsはが== '' ){ 
            約束 = 新しいプロミス((決意、リジェクト)=> { 
                (NetUtil.baseUrlフェッチ + URL、{メソッド:メソッド、ヘッダ:ヘッダ})
                    .then(応答が => response.json( ))
                    .then(responseData => 解決(responseData))
                    .then(ERR => リジェクト(ERR))
            })
        } {
            約束 = 新しいプロミス((決意、リジェクト)=> { 
                フェッチ(NetUtil.baseUrl + URL、{メソッド:メソッド、ヘッダ:ヘッダ、ボディ:JSON.stringify(paramsは)})
                    .then(応答が => response.json( ))
                    .then(responseData => 解決(responseData))
                    .then(ERR => リジェクト(ERR))
            })
        } 
        戻りNetUtil.warp_fetch(約束)。
    } 

    / * *  
     2つのオブジェクトを作成する*約束、ネットワーク要求より指定された時間よりも、それは最初のネットワークタイムアウトに代わってコールバック約束をタイムアウトになる場合は、他には、タイミングのために責任があります。
     * @param {プロミスは}请求返回的約束をフェッチfetch_promise
     * @Param {数} [タイムアウト= 10000] 単位:MSは、デフォルトのタイムアウトは10秒であって
     @return戻り*プロミス
     * / 
    静的warp_fetch(fetch_promise、タイムアウト = 10000 ){ 
        timeout_fnせ = ヌル; 
        ABORTせ = ヌル// タイムアウトを作成約束 
        LETのtimeout_promise = 新しい新しいプロミス(関数(解決、拒否){ 
            timeout_fn = 関数{() 拒否 '時限アウト' ); 
            }; 
        });
        終了約束を作成します// 
        abort_promise =せて新たな約束(関数(決意、リジェクト){ 
            アボート = 関数(){ 
                拒否( '请求终止' ); 
            }; 
        }); 
        // 竞赛 
        せabortable_promise = Promise.race([ 
            fetch_promise、
            timeout_promise、
            abort_promise、
        ])。
        // 计时
        のsetTimeout(timeout_fn、タイムアウト);
        // 终止 
        abortable_promise.abort = 打ち切り。
        返すabortable_promise;
    } 
}

輸出デフォルト NetUtil。

 

おすすめ

転載: www.cnblogs.com/0616--ataozhijia/p/12600128.html