gpt4 book ai didi

javascript - 您可以调用一个 saga 并仅在另一个 saga 完成时继续执行吗?

转载 作者:行者123 更新时间:2023-12-03 04:51:41 32 4
gpt4 key购买 nike

我们的应用程序使用尝试 - 成功 - 失败的方法来处理来自服务器的响应。

我有一个生成器函数,需要像这样运行:

function * getSingleSectorAttempt(action) {
const sectors = yield select(getSectors);
if (!sectors) {
//If there are no sectors, I need to call the GET_SECTORS_ATTEMPT action
//and only restart/continue this saga when the GET_SECTORS_SUCCESS action is fired
}
const id = sectors[action.name].id;
try {
const response = yield call(api.getSector, id);
//...
} catch (err) {
//...
}
}

从我读到的 Redux Saga 文档来看,这似乎不可能立即实现。不过,我想看看我是否遗漏了一些东西。我已经尝试过这个:

yield fork(takeLatest, Type.GET_SECTORS_SUCCESS, getSingleSectorAttempt);
yield put(Actions.getSectorsAttempt());

if(!sectors) 条件 block 中,但是虽然这有效,但它不会保留初始 GET_SINGLE_SECTOR_ATTEMPT 操作参数,而且我不确定如何获取它这样做而不需要陷入回调和参数意大利面。

最佳答案

允许您等待操作被分派(dispatch)的效果是take。对于您的情况:

function* getSingleSectorAttempt(action) {
let sectors = yield select(getSectors);
if (!sectors) {
yield put(getSectorsAttempt());
yield take(GET_SECTORS_SUCCESS);
sectors = yield select(getSectors);
}
// resume here as normal
}

您自己的答案可能会产生意想不到的副作用。例如,如果 getSectors 在应用程序的生命周期中可以多次返回虚假值,则您将有多个 fork 进程等待 GET_SECTORS_SUCCESS 被分派(dispatch),并且每个进程都执行您的副作用,每个都保留对触发它的操作的引用。

关于javascript - 您可以调用一个 saga 并仅在另一个 saga 完成时继续执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42633737/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com