一瞬にして、百万の可能性があります。

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のクラスメートに対して論理的に処理する時注意してほしいです。ここの穴はまだ多いです。