从生成器函数内部调用函数
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 试图将它作为一个函数来调用,这是行不通的。
我需要从生成器函数内部调用函数 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 试图将它作为一个函数来调用,这是行不通的。