redux saga
中是否有一种方法可以将由call
效果所调用的函数中的操作调度到全局存储中?
例如:
export function* login({ payload }) {
try {
// from API.post I want to be able to dispatch an action that I will handle in a different saga.
const resp = yield call(API.post, 'api/1/login', {
email: payload.email,
password: payload.password,
});
yield put(AuthActions.loginSuccess(resp.token));
} catch (error) {
yield put(AuthActions.loginError(error));
}
}
我知道我可以使用传奇的channel
,但是如果我将频道传递给API.post
,则必须使用take(channel)
,并且我想在其他文件中处理此操作,所以我不有权访问此频道。而且我也不确定我要导出通道并将其导入到其他文件中,因为我希望每个传奇都是独立的。
我该怎么办?
答案 0 :(得分:-1)
一种可能性是为API
调用创建包装函数。像这样:
// `apiRequest` dispatches `anotherAction` and calls given `apiCall`
function* apiRequest(apiCall, ...args) {
yield put(anotherAction())
yield call(apiCall, ...arg)
}
export function* login({ payload }) {
try {
const resp = yield apiRequest(API.post, 'api/1/login', {
email: payload.email,
password: payload.password,
})
yield put(AuthActions.loginSuccess(resp.token))
} catch (error) {
yield put(AuthActions.loginError(error))
}
}