2016-12-06 18 views
0

私は非同期アクションfetchTasksを持っています。これにはタスクのリストが与えられており、各タスクの要求が送信されます。フロントエンドは一度に5つのリクエストしか送信できないようにしたい。多くのコンポーネントにはAjaxの機能があるので、私はreduxストア内にリクエストカウンタを実装することに決めました。この値はfetchCountと呼ばれ、ユーザーが要求を送信できるようにするかどうかを確認するために多くのコンポーネントで使用されます。ストアを非同期Reduxアクションに接続する方法

問題はfetchTasksで、タスクリストで5つ以上のタスクを取得できるようになりました。私はfetchCountが0に達するまで最初にリクエストを送信することでそれを処理しました。その後、フェッチのためにサーバーの応答が受け取られるたびに再帰的にfetchTasksを呼び出します。

function fetchTasks(taskList){ 
    return dispatch => { 
     while(taskList.length > 0 && fetchCount > 0){ // <-- I need fetchCount to be up to date with the store 
      decrementFetchCount(); //a redux action 
      let task = taskList.pop(); 
      $ajax({ 
       url: `/do/${task}`, 
       success:(data)=>{ 
       processData(data); // redux action 
       incrementFetchCount(); // a redux action 
       dispatch(fetchTasks(taskList)); 
       } 
      }); 
     } 
    } 
} 

私の問題は、私はその実行時間の任意の時点でfetchCountの価値を認識するfetchTasksが必要だということです。私はそれをストアに接続することが重要だと考えていますが、ストアに関数を接続する方法はわかりません。そこに問題があります。 また、これはにおいがします。誰かがこれを実装する別の方法を提案したい場合は、それも有効な回答になります。

+1

あなたはそれがすべてのユーザによって操作に対して安全にしたい場合は、クライアント側でこれを実行しないでください。クライアント上で実行されるコードは、ユーザーが任意に変更できます。 – Timo

+0

私は気付いていますが、私はそれについて心配していません。これは内部ツールに過ぎません。しかし、ヘッドアップありがとう –

答えて

0

私はこれがredux-thunkを使用していると仮定しています。 2番目のパラメータはgetStateと合わせてdispatchとすることができます。あなたfetchTasksは、次のようになります

...

function fetchTasks(taskList) { 
    return (dispatch, getState) => { 
     while (taskList.length > 0 && getState().fetchCount > 0) { 
     ... 
    } 
} 
+0

それは完璧です。実際、私は 'redux-thunk'を使っています。あなたは 'getState'パラメータを含めることができるのか分かりませんでした! –

関連する問題