我需要从生成器函数内部调用函数 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);
}
}
但是我遇到了以下错误。
解析错误:yield在严格模式下是保留字
我尝试将功能修改为
function* displayError(error) {
..
}
并以yield call(displayError(error))
的身份调用
,但似乎不起作用。关于如何解决此问题的任何想法?
答案 0 :(得分:0)
您需要使displayError
成为生成器,并将其参数作为call
效果的第二个参数。像这样:
yield call(displayError, error);
原因是displayError(error)在调用站点被求值,并且此表达式返回一个迭代器对象,然后saga运行时尝试将其作为函数调用,这不起作用。