2017-06-21 13 views
3

私はReactJSで新しく、私のajaxコールではAxiosライブラリを使用しようとしました。それはすごいですが、Axisインタセプタに保留中のリクエストがあるかどうかを知る方法があるかどうかを知りたいのですが、Ajaxコールがオーバーレイされていることを表示しています(まだ表示されていない場合)。約束は解決される。アキシャルで保留中のリクエストがあるかどうかを知る

axios.interceptors.request.use(function (config) { 
    //here logi of show loading 
    return config; 
}, function (error) { 
    return Promise.reject(error); 
}); 

そして、私はこのような何かを追加たい:今私はインターセプタとスタートを開発するために それは最後の応答かどう

axios.interceptors.respose.use(function (config) { 
    //logic remove loading if it is last response 
    return config; 
}, function (error) { 
    return Promise.reject(error); 
}); 

を、どのように、(それがpossibileある場合は)知っていますか?

$http.pendingRequests 

$ HTTPサービスのようなaxios何かであるが ReactJsを使用する前に、私は$http serviceの角度1.1を使用していましたか?

+0

これを行うもう一つの方法は、あなたのUIの状態を使用することです。たとえば、isLoadingという反応コンポーネントの状態が最初にfalseに設定されているとします。フェッチが完了したら、状態をtrueに変更します。 UIで、isLoadingがfalseの場合、読み込みコンポーネントをレンダリングします。 http://jsbin.com/cakireweku/edit?html,js,output –

+0

ありがとう、はい、このように、私はすべてのAjax呼び出しで読み込みを処理する必要があります。インターセプタのように1つの場所に読み込むので、setStateを心配する必要もなく、すべての呼び出しでロードを表示する必要はありません。 – LorenzoBerti

答えて

2

これが私の解決策だった:)

var numberOfAjaxCAllPending = 0; 

// Add a request interceptor 
axios.interceptors.request.use(function (config) { 
    numberOfAjaxCAllPending++; 
    // show loader 
    return config; 
}, function (error) { 
    return Promise.reject(error); 
}); 

// Add a response interceptor 
axios.interceptors.response.use(function (response) { 
    numberOfAjaxCAllPending--; 
    console.log("------------ Ajax pending", numberOfAjaxCAllPending); 

    if (numberOfAjaxCAllPending == 0) { 
     //hide loader 
    } 
    return response; 
}, function (error) { 
    return Promise.reject(error); 
}); 
+0

これは役に立ちました。この後、Ajaxリクエストが必要です。 – Ukor

関連する問題