私はAPIコールを使用してデータを取得し、私のreduxストアを更新しています。次に、各API呼び出しの状態の変更を示します。プロミス。すべての約束を解決するためにいくつかreduxストアを更新することができませんでした
- API呼び出しを行う前に、成功した
true
- として
isLoading
を設定するには、false
としてisLoading
をリセット失敗しfalse
- として
isLoading
をリセットしtrue
としてisError
を設定します。
私のコンポーネントには、以下の構造の3つの異なるレビュックスストアに格納された3つのAPIのデータが必要です。私のコンポーネントで
store: {
book: {
isLoading: false,
isError: false,
data: {}
},
teacher: {
isLoading: false,
isError: false,
data: {}
},
}
、私は
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を呼び出すために、次の使用私は以下のように負荷状態をチェックするためにselector
を書かれています。 getIsLoading
の値に基づいて
export const getIsLoading = createSelector([
getIsBookLoading,
getIsTeacherLoading,
],
(bLoading, tLoading) => (
bLoading || tLoading
)
);
私はコンポーネントをレンダリングそうでない場合は、私のコンポーネントに積載状態を示します。
しかし、API呼び出しのいずれかが失敗したときに問題が発生することがあります。たとえば、loadBook
は100ミリ秒で失敗し、そのときはbLoading
がfalse
に変更されますが、tLoading
はまだtrueです。bcz loadTeacher
api呼び出しが完了していません。 Promise.all()
以来、APIの呼び出しはloadTeacher
は決して完了しませんでしたので、tLoading
stas true
です。
Promsie.all
は、汚れた状態をきれいにすることができないものがあってもすべてのコールを解決させる方法はありますか?
はい、私はそれがなぜ 'Promise.all()'が終了するのかを理解しています。他の多くのモジュールで使用されているAPIコールロジックbczを変更することはできません。どのように私が私の側で扱うことができるか考えていた。 – joy