3
最近私はredux-sagaを使い始めました。私は本当に気に入っています。reduxサンクからreduxサガへのAPIコールラッパーの移行方法
私は約束(私のAPIコール)を受け取り、プリローダーを表示してエラーを処理する私のAPIコールに使用していた以下のラッパーを持っています。
export const callApi = (promise: Promise<any>, errorMsg: string = 'Api error') => (dispatch: Dispatch) => {
dispatch(setLoading(true));
return promise.then(
(response) => {
dispatch(setLoading(false));
return response.body;
},
(error) => {
dispatch(setLoading(false));
dispatch(apiError(errorMsg, error));
return error;
});
};
私はredux sagaでこのような動作をどのように再現するのかは不明です。このようなことをする例は見つけられませんでしたか?
は、これまでのところ私は
const camelizeKeysPromise = (obj) => Promise.resolve(camelizeKeys(obj));
export function* sagaCallApi(promise: Promise<any>, errorMsg: string = 'Api error') {
yield put(setLoading(true));
try {
const response = yield call(promise);
try {
const result = yield call(camelizeKeysPromise(response.body));
return result;
} catch (e) {
return response.body;
}
} catch (exception) {
yield put(setLoading(false));
yield put(apiError(errorMsg, error));
};
}
あなたの答えに感謝します。私はちょうどチャンネルで読んでいます。私は、約束の代わりに、約束を返す関数を渡したなら、これが必要ではないと思うのは間違いないでしょうか? – Tom
質問を誤解しない限り、その機能にコールエフェクトを与えると、あなたは約束を得て応答を返さないので、おそらく同じ問題に終わるでしょう。 –