2016-12-06 100 views
0

我有一個異步操作fetchTasks給出了一個任務列表,併發送每個任務的請求(這些可能需要或可能不需要一段時間才能完成)。我希望我的前端一次只能發送5個請求。由於許多組件具有Ajax功能,因此我決定在Redux商店中實現請求計數器。該值被稱爲fetchCount,並被許多組件用於查看他們是否想允許用戶發送請求。如何Redux連接存儲到異步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)); 
       } 
      }); 
     } 
    } 
} 

我的問題是,我需要fetchTasks要注意的fetchCount的價值在其運行的任意時間點。我想連接到商店是關鍵,但我不知道如何將一個功能連接到商店。這就是問題所在。另外,這味道。如果某人有另一種方法來實現他們想要提出的建議,那也是一個有效的答案。

+1

如果你想讓它由用戶來對抗操縱的安全根本不這樣做在客戶端。在客戶端上執行的任何代碼都可以由用戶任意更改。 – Timo

+0

我知道,但我並不擔心,這只是一個內部工具。雖然 –

回答

0

我假設這是使用redux-thunk。你可以有第二個參數getState連同dispatch

fetchTasks會是這個樣子......

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

非常感謝,但這是完美的。事實上,我正在使用'redux-thunk'。不知道你可以包含'getState'參數! –