2016-09-12 12 views
1

isomorphic-fetchのメソッドをオーバーライドして、このリクエストを送信する直前にshowLoader()を呼び出し、リクエストが終了した後にhideLoader()を呼び出します。今度は、新しいフェッチを元のフェッチメソッドと同様にチェーンできるように、オーバーライドする必要があります。だから、それはすべての約束を尊重したり進めるべきだ。要約すると、私がしたい:fetchPlus(extraArg) JSでのフェッチメソッドのオーバーライドと転送プロミス

  • fetchPlus()に元fetch()がちょうどfetch()を呼び出す前に、ちょうどfetch()完了後addtionalの作業を行う必要がある

    • オーバーライド。
    • fetchPlus()は私が行うことができるようにそれが連鎖をサポートする必要があり、元のfetch()
    • の用途のための代替でドロップする必要があります:

    fetchPlus(extraArg, originalArgs...).then(response => {...}).catch(error => {...});

    私は、JSにかなり新しいです反応し、Reduxの明白な何かを忘れてしまった場合は、私にご容赦ください。私はfetch()を読んで、Promiseを返すことがわかっているので、応答をさらに渡すか、エラーを処理することができます。私はそれを行う醜い方法を考え出したのですが、ここでは、responseHandlerとerrorHandlerの関数をfetchPlusのargsとして渡します。

    fetchPlus(extraArg, url, options, responseHandler, errorHandler) { 
        showLoader(extraArg); 
        fetch(url, options) 
        .then(response => { 
         hideLoader(extraArg); 
         responseHandler(response); 
        }.catch(error => { errorHandler(error); }); 
    } 
    

    しかし、私はそれがきれいではありません。私は、プロミスが正しく渡された元のフェッチのためのドロップイン置換を見つけることができるかどうかを見たいと思います。

    私は非常に助けていただければ幸いです!

  • +0

    あなたは* * 'fetch'機能を無効にするために、あるいは単に' fetch'機能の修正版となり、新しい関数を作成しますか? –

    +0

    私はフェッチ関数をラップして、実際のfetch()を呼び出す前後に追加の処理をしたいと思っています。ですから、fetch()やfetch()の修正版をオーバーライドすることができますか?以下の答えは私の問題を解決します。 –

    +0

    オーバーライドは、 'fetch'に他の関数を割り当てることを意味します。 –

    答えて

    3

    プロミスが返ってきたことが分かっていれば、なぜ戻りませんか?

    fetchPlus(extraArg, url, options) { 
        showLoader(extraArg); 
        return fetch(url, options) 
         .then(response => { 
         hideLoader(extraArg); 
         return response; 
         } 
    } 
    

    そして、それを使用する:

    fetchPlus(extraArg, url, options) 
        .then(response => ...) 
        .catch(error => ...) 
    
    +1

    パーフェクト!これは私の期待通りに機能します。私はそのハンドラーのことからPromiseを返すことができないことに気付かなかった。どうもありがとうございます! –

    +1

    それは連鎖可能な約束です。 – azium

    関連する問題