redux-saga 不同时处理相同操作的多个实例
redux-saga not handling multiple instances of the same actions concurrently
我正在使用 sagas 上传数量可变的媒体文件。所以你可以动态添加更多的媒体文件。我 运行 遇到的问题是,当文件在不等待前一个文件完成的情况下上传时,之前发送的操作会丢失,然后发送新的操作。基本上,这就像具有相同操作类型 UPLOAD_ACTION
.
的 catch 的并发操作
代码是这样的:
export default function* root() {
yield all([takeLatest(LOGIN_REQUEST, login), ..., takeLatest(UPLOAD_REQUEST, upload)]);
}
function* uploadSlide({payload}) {
try {
const response = yield call(
uploadApi,
payload
);
yield put({type: SUCCESS, payload: response});
} catch (error) {
yield put(type: FAILURE);
}
}
我尝试了不同的替代方法,例如使用 takeEvery
或 channel
,但它们没有用。
有什么建议吗?
您需要使用 takeEvery
而不是 takeLatest
。 takeEvery
在发送到与模式匹配的 Store 的每个操作上生成一个 saga。
我在上传很多文件时遇到了同样的问题。
使用 takeEvery
而不是 takeLatest
。
takeLatest
旨在取消之前的调用,这正是你所遭受的。
我认为您系统的其他部分存在错误。
我正在使用 sagas 上传数量可变的媒体文件。所以你可以动态添加更多的媒体文件。我 运行 遇到的问题是,当文件在不等待前一个文件完成的情况下上传时,之前发送的操作会丢失,然后发送新的操作。基本上,这就像具有相同操作类型 UPLOAD_ACTION
.
代码是这样的:
export default function* root() {
yield all([takeLatest(LOGIN_REQUEST, login), ..., takeLatest(UPLOAD_REQUEST, upload)]);
}
function* uploadSlide({payload}) {
try {
const response = yield call(
uploadApi,
payload
);
yield put({type: SUCCESS, payload: response});
} catch (error) {
yield put(type: FAILURE);
}
}
我尝试了不同的替代方法,例如使用 takeEvery
或 channel
,但它们没有用。
有什么建议吗?
您需要使用 takeEvery
而不是 takeLatest
。 takeEvery
在发送到与模式匹配的 Store 的每个操作上生成一个 saga。
我在上传很多文件时遇到了同样的问题。
使用 takeEvery
而不是 takeLatest
。
takeLatest
旨在取消之前的调用,这正是你所遭受的。
我认为您系统的其他部分存在错误。