まず、アイデアの実現
特徴は、私たちがPromise.raceこれは2つのタスクを追加Promise.race、1は通常のWeb要求タスクAは、別のタスクBは、ネットワークの遅延は、ネットワークレイテンシがのsetTimeoutメソッドを利用することができる、です。
今回は三つの条件があります:
1.Aのタスクが完了する8秒、正常終了Promise.raceタスク内(8秒でタイムアウトと仮定して)。
2.まだ自動タイマー割り込みタスクB Promise.race年末までに完了していない8秒以上のタスクを。
3.異常、Promise.raceは自動的に終了します。
上記の3例についてネットワークタイムアウトスキームを設計します。
今回は三つの条件があります:
1.Aのタスクが完了する8秒、正常終了Promise.raceタスク内(8秒でタイムアウトと仮定して)。
2.まだ自動タイマー割り込みタスクB Promise.race年末までに完了していない8秒以上のタスクを。
3.異常、Promise.raceは自動的に終了します。
上記の3例についてネットワークタイムアウトスキームを設計します。
第二に、コード
HttpUtil.js
// 定義する遅延機能 のconst遅延=(= TIMEOUT 8。 * 1000年)=> { 返す 新しい新しい約束を((解決、拒否)=> { のsetTimeout(() => { (拒否新しい新しいエラー(' ネットワークタイムを' ); }、TIMEOUT); }) } // フェッチ要求ネットワーク CONST fetchPromise =(メソッド、URL、FORMDATA)=> { 戻り 新しい新しい約束を((解決、拒否)=> { (URL、{FETCH 方法:方法、 本体:FORMDATAを })を((応答)=> { 場合(response.ok){ 戻りresponse.json()。 } 他{ 拒否(新しいエラー(' 服务器异常' )); } 。})を((responseJson) => { 解決(responseJson); })。キャッチ((ERR)=> { 拒否(新しいエラー(ERR); }) }) } // レース任务 のconst _fetch =(fetchPromise、タイムアウト)=> { リターンPromise.race([fetchPromise、遅延(タイムアウト)])。 } // ポスト CONST HttpPost =(URL、FORMDATA、タイムアウト= 8 * 1000年)=> { 戻り _fetch(fetchPromise(' POST ' 、URL、FORMDATA)、タイムアウト)。 }。 //は、取得 のconst HTTPGET =(URL、タイムアウト= 8 * 1000年)=> { 戻り _fetch(fetchPromise(' ゲット' 、URL)を、タイムアウト)。 }。
export {HttpPost ,HttpGet}
参考:
https://www.jianshu.com/p/2df7c6e3b3c3
このブログのアドレス:wukong1688
この記事オリジナル住所:https://www.cnblogs.com/wukong1688/p/10963004.html
有名なソースを転載してください!~~ありがとう