비동기 작업 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
을 필요로한다는 것입니다. 저장소에 연결하는 것이 핵심이라고 생각하지만 저장소에 함수를 연결하는 방법을 모르겠습니다. 거기에 문제가 있습니다. 또한 냄새가납니다. 다른 사람이 이것을 구현하는 다른 방법을 제안하고 싶다면 유효한 대답이 될 수도 있습니다.
당신이 모든 사용자에 의해 조작에 대한 안전하려면 클라이언트 측에서이 작업을 수행하지 마십시오. 클라이언트에서 실행되는 코드는 사용자가 임의로 변경할 수 있습니다. – Timo
나는 알고 있지만, 걱정하지 않는다. 이것은 내부 도구 일 뿐이다. 그래도 머리를 주셔서 감사합니다 –