reactjs - 从生成器函数内部调用函数
问题描述
我需要从生成器函数内部调用函数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))
但它似乎不起作用。关于如何解决这个问题的任何想法?
解决方案
您需要制作displayError
一个生成器并将其参数作为第二个参数提供call
。像这样:
yield call(displayError, error);
原因是 displayError(error) 在调用站点被评估并且这个表达式返回一个迭代器对象,然后 saga 运行时尝试将它作为一个函数调用,这不起作用。
推荐阅读
- r - 删除 r 中包含整数的列
- java - 并发文件移动访问
- java - Elasticsearch,文档中数组大小的总和
- reactjs - React Native how to use styles props
- python - How to match & replace multiple strings with regex in Python
- swift - 试图用 swift 理解 NSLayoutConstraints
- c - 与 Pthread 和互斥锁共享有界缓冲区,忙等待
- java - How to remove item from firebase list
- javascript - 有条件渲染项目的排序列表
- python - 普通数据集的训练数据的keras输入维度是多少?