Javascript redux传奇没有';我第一次不工作

Javascript redux传奇没有';我第一次不工作,javascript,reactjs,redux,react-redux,redux-saga,Javascript,Reactjs,Redux,React Redux,Redux Saga,我有一个redux传奇,如下所示: export function* loadApplianceSaga() { try { let {request, success, error} = yield take(ActionTypes.APPLIANCE.LOAD); request.url = yield select(getResourceLink, request.resource); const response = yield call(makeReques

我有一个redux传奇,如下所示:

export function* loadApplianceSaga() {
  try {
    let {request, success, error} = yield take(ActionTypes.APPLIANCE.LOAD);
    request.url = yield select(getResourceLink, request.resource);
    const response = yield call(makeRequest, request);
    if (!response.error) {
      yield put({type: success, payload: response.body});
    } else {
      yield put({type: error, payload: response});
    }
  } catch (e) {
    yield put({type: ActionTypes.REQUEST.CALL_ERROR, error: e});
  }
}

export function* watchLoadAppliance() {
  while (true) {
    yield* takeEvery(ActionTypes.APPLIANCE.LOAD, loadApplianceSaga);
  }
}
和根传奇:

export default function* rootSaga() {
  yield [
    fork(watchLoadAppliance)
  ]
}
我遇到了一个问题,
loadApplianceSaga
在第一时间不起作用。我在日志中看到,第一次它只调度
ActionTypes.APPLIANCE.LOAD
action,然后不调度任何操作。但在第二次,我可以看到发送的成功操作或失败操作

谁能告诉我出了什么事?提前谢谢

更新的操作

export const loadAppliances = () => {
  return {
    type: ActionTypes.APPLIANCE.LOAD,
    request: {
      resource: Resources.Appliances,
      param: {
        page: 0,
        size: 5,
        sort: 'name,desc'
      },
      header: {
        Accept: 'application/json'
      }
    },
    success: ActionTypes.APPLIANCE.LOAD_SUCCESS,
    error: ActionTypes.APPLIANCE.LOAD_ERROR
  }
};

您已经使用了两次
take
。 试一试


这个动作包括{request,success,error}吗?是的,这个动作包括所有的动作。我添加了动作@乌特罗坦感谢你!这很有效。你能解释一下我为什么会遇到这个问题吗?我是ReDux Saar的新手。我想,你不应该改变动作@ AnNguyenoh,我会考虑的。谢谢关于这个问题。。我想,您已经尝试通过loadApplianceSaga中的附加
采取
效果来获得该操作,但是
采取每一项
所有准备就绪将其传递给loadApplianceSaga@AnNguyen
export function* loadApplianceSaga(action) {
  try {
    let {request, success, error} = action;
    request.url = yield select(getResourceLink, request.resource);
    const response = yield call(makeRequest, request);
    if (!response.error) {
      yield put({type: success, payload: response.body});
    } else {
      yield put({type: error, payload: response});
    }
  } catch (e) {
    yield put({type: ActionTypes.REQUEST.CALL_ERROR, error: e});
  }
}

export function* watchLoadAppliance() {
  while (true) {
    yield* takeEvery(ActionTypes.APPLIANCE.LOAD, loadApplianceSaga);
  }
}