2017-04-03 4 views
1

나는 redux reducers에 관해 뭔가를 찾으려고 노력하고 있는데, JavaScript라고하기 때문에 용어가 다를 수 있다고 생각합니다. 다음 감속기 가정Dispatch Sequence 보장

:

import { 
    ONE, 
    TWO, 
    THREE 
} from "../actions/types"; 

export default function reducer(state = { /* some init state here */ }, action) { 
    switch (action.type) { 
    case ONE: { 
     // this case takes 500ms to finish 
     return {...state } 
    } 
    case TWO: { 
     // this case takes 200ms to finish 
     return {...state } 
    } 
    case THREE: { 
     // this case takes 100ms to finish 
     return {...state } 
    } 
    default: { 
     return {...state } 
    } 
}; 

나는 액션에서 다음 한 경우 :

dispatch({type: ONE}); 
dispatch({type: TWO}); 
dispatch({type: THREE}); 

은 순서대로 해결하기 위해 보장을? 의미는 상태가 동기화되고 "단일 스레드"입니까? 예를 들어, case TWO: {}case ONE: {} 전에 완료 되었습니까?

+0

나는 당신이 약속을하거나 아무 것도하지 않아서 핸들러에서 작업을 일시 중지하기 때문에 동기식으로 발생한다고 추측합니다. 제공된 코드의 어떤 것도 내게 그것이 잘못된 순서로 끝날 것을 제안하지 않습니다. 누군가가 이것에 대한 실제 테스트를 수행하는지 확인하는 데 관심이 있습니다. –

답변

3

dispatch은 기본적으로 동기화되어 있으므로 작업 작성자에서 비동기 호출이없는 한 선언 된 순서대로 실행됩니다.

redux's docsdispatch() 동기임을 암시 :

동작 제작자는 비동기 및 부작용을 가질 수있다. 은 고급 자습서에서 비동기 동작에 대해 읽고 AJAX 응답을 처리하고 동작 작성자를 비동기 제어 흐름으로 구성하는 방법을 학습 할 수 있습니다.

+0

예, 원래의'store.dispatch()'함수는 100 % 동기식이며, 반환하면 상태가 업데이트되었습니다. 미들웨어가 작업을 가로 채고 다른 작업을 수행하면 비동기 성이 발생합니다. – markerikson