从生成器函数内部调用函数

Calling a function from inside the generator function

我需要从生成器函数内部调用函数 displayError。代码如下

function* createPatient(action) {
  try {
    yield call(createPatientApi, action.payload);
    yield put({ type: types.PATIENT_CREATE_SUCCESS });
    yield put(constants.successMsg(patientCreateSuccess));
  } catch (error) {
    // dispatch a failure action to the store with the error
    displayError(error)
  }
}

function displayError(error) {
  if (error.response && !(error.response.data.success)) {
    let resp = error.response.data;
    yield put({ type: types.PATIENT_CREATE_FAILURE, resp });
  } else {
    yield put(constants.DEFAULT_ERROR_MSG);
  }
}

但是我收到以下错误。

Parsing error: yield is a reserved word in strict mode

我尝试将函数修改为

function* displayError(error) {
 ..
}

并将其调用为 yield call(displayError(error))

但是好像不行。知道如何解决这个问题吗?

您需要制作 displayError 生成器并将其参数作为第二个参数提供给 call 效果。像这样:

yield call(displayError, error);

原因是 displayError(error) 在调用点被求值,这个表达式 returns 是一个迭代器对象,然后 saga runtime 试图将它作为一个函数来调用,这是行不通的。