API 호출을 사용하여 데이터를 가져오고 내 redux 저장소를 업데이트합니다. 다음은 각 API 호출에 대한 상태 변경입니다.Promise.all 일부가 redux 저장소를 업데이트하지 못한 경우에도 모든 약속을 해결합니다.
- API 호출을하기 전에 성공
true
- 로
isLoading
설정은false
로isLoading
를 다시 실패하면false
- 로
isLoading
를 재설정하고true
로isError
을 설정합니다.
내 구성 요소에는 아래의 구조와 같이 3 개의 다른 redux 저장소에 저장된 3 개의 API의 데이터가 필요합니다. 내 구성 요소에서
store: {
book: {
isLoading: false,
isError: false,
data: {}
},
teacher: {
isLoading: false,
isError: false,
data: {}
},
}
는, 나는 다음과 같이 로딩 상태를 확인하기 위해
selector
를 작성했습니다
componentWillMount() {
const {
loadBook,
loadTeacher,
} = this.props;
// all these load functions dispatch action which returns Promise for async API call using `fetch`
const apiCalls = [
loadBook(),
loadTeacher(),
];
Promise.all(apiCalls);
}
API를 호출하려면 다음을 사용합니다.
export const getIsLoading = createSelector([
getIsBookLoading,
getIsTeacherLoading,
],
(bLoading, tLoading) => (
bLoading || tLoading
)
);
는 getIsLoading
의 값을 기준으로 내가 요소를 렌더링, 그렇지 않으면 내 구성 요소의로드 상태를 보여 않습니다.
그러나 API 호출 중 하나가 실패하면 문제가 발생합니다. 예를 들어, loadBook
은 100ms에서 실패하고 bLoading
은 false
으로 다시 변경되지만 tLoading
은 여전히 true입니다. bcz loadTeacher
API 호출이 완료되지 않았습니다. Promise.all()
이후 모두 또는 아무 것도하지 않으므로 loadTeacher
에 대한 API 호출이 완료되지 않으므로 tLoading
stas true
.
Promsie.all
은 더티 상태를 정리할 수 없도록 일부 호출이 실패하더라도 해결할 수 있습니까?
예, 그렇기 때문에'Promise.all() '이 종료 된 것입니다. 다른 많은 모듈에서 사용되는 API 호출 논리 bcz를 변경할 수 없습니다. 내가 어떻게 내 편에서 처리 할 수 있을지 생각하고 있었다. – joy