一瞬にして、百万の可能性があります。
2796 ワード
直接コード:
/**
* Created by wind on 2018/10/16 14:06
*
* Description:
*
* @flow
*/
import { put, call, fork, take, select} from 'redux-saga/effects';
import * as api from '../../../base/service/http/Api';
import * as actions from '../action/roomList';
import { fetchApi } from '../../../base/utils/SagaHelper';
import * as types from '../types';
import { HUDLoading, Toast } from '../../../base/widgets/index';
import MyToast from "../../../base/widgets/Toast";
const fetchRequestCheckoutApi = fetchApi.bind(null, actions.requestCheckout, api.requestCheckout);
function* watcheRquestCheckout() {
while (true) {
const {payload} = yield take(types.REQUESTCHECKOUT.REQUEST);
HUDLoading.showLoading();
yield fork(fetchRequestCheckoutApi, payload);
const action = yield take([types.REQUESTCHECKOUT.SUCCESS, types.REQUESTCHECKOUT.FAILURE]);
HUDLoading.dismissLoading();
if (action.type === types.REQUESTCHECKOUT.FAILURE) {
MyToast.showToastNoMask(action.payload);
continue;
}
}
}
// , success failure
// function* watchRquestCheckoutFAILURE() {
// while (true) {
// const {payload} = yield take(types.REQUESTCHECKOUT.FAILURE);
// HUDLoading.dismissLoading();
// Toast.showToastNoMask(payload);
// }
// }
export default [
watcheRquestCheckout
];
もしかしたら、あなたが見終わった後、ぼんやりした顔をしているかもしれません。何日間後に自分でこの文章を見ても、無頓着な顔をしているかもしれません。これはいったい何を書いていますか?実は何でもないです。三日間のバグに悩まされています。なぜですか?これは一体なぜですか?しかし、一瞬にして、書き換えて問題が解決されました。この記録では、次の機会に会ったら、直接に書き換えてください。コードを書くのは楽しいです。コードを書くのが一番好きです。記録:問題はレdux-sagaここにあります。一つの要求を送るには、actionを送ることを採用しています。actionは五つの種類に分けられます。const createActionTypes = actionName => ({
REQUEST: `${actionName}_REQUEST`,
PENDING: `${actionName}_PENDING`,
SUCCESS: `${actionName}_SUCCESS`,
FAILURE: `${actionName}_ERROR`,
RESET: `${actionName}_RESET`,
});
対応する処理方法は:const creatActionCreators = (actions) => ({
request: (payload) => creatActionCreator(actions.REQUEST, payload),
pending: (payload) => creatActionCreator(actions.PENDING, payload),
success: (payload, meta) => creatActionCreator(actions.SUCCESS, payload, meta),
failure: (payload, meta) => creatActionCreator(actions.FAILURE, payload, meta),
reset: (payload) => creatActionCreator(actions.RESET, payload),
});
一般的に一つの要求を送るとxxxx_から送られます。REQUESTは下に行って、それぞれxxxx_PENDING、最後にxxxx_に行きます。SUCCESSまたはxxxx_FAILUREですが、このインターフェースに遭遇したのは一回だけで、二回目はいくらactionを出してもxxxxxxxuだけです。REQUESTは、その後、すべてのページコード、action、reducer、saga、バックエンドのインターフェースまでpostmanを持ってデバッグしましたが、まだ問題は発見されていません。その後、sagaをじっと見ていました。このコードは私が書いたのではないので、100%ここの問題だと推測しました。やはり、書き換えたら大丈夫です。同じsagaのクラスメートに対して論理的に処理する時注意してほしいです。ここの穴はまだ多いです。