2016-12-06 91 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'参数! –