gpt4 book ai didi

javascript - 如何在 saga 中解决第一个操作后执行操作?

转载 作者:行者123 更新时间:2023-12-02 23:03:56 24 4
gpt4 key购买 nike

我正在开发一个使用 React、Redux-Saga 的项目。在我的代码中,我必须调用相同的操作两次。我想一一处决他们。但发生的情况是,它们都被同时调用,因为它们本质上是非阻塞的,并且在传奇选择器中,它只解析到达它的第一个操作。如何在调用这些操作的 react 组件中更改此行为?我无法对传奇进行更改,因为我对它了解不够,而且我只处理 react 。请指导我!!!

我尝试使用 setTimeout(),但愚蠢的是它不起作用,因为这些函数本质上是非阻塞的。

let body = {}

body = {
uuid: dragRow.uuid,
orderId: hoverRowId
}
console.log("update for: ", dragRow)
this.props.updateSection(body);


body = {
uuid: hoverRow.uuid,
orderId: dragRowId
}
console.log("update for: ", hoverRow);
this.props.updateSection(body);

这是传奇的代码:

//UPDATE SECTION
function* updateSection(sectionAction) {
try {
const payload = yield call(Api.updateSection, sectionAction.payload);
yield put({ type: sectionAction.type + "_success",payload: payload });
} catch (error) {
yield put({ type: sectionAction.type + "_failed", error })
}
}

function* watchUpdateSection() {
yield takeLeading([sectionConstants.UPDATE_SECTION, sectionConstants.HIDE_SECTION, sectionConstants.PUBLISH_SECTION], updateSection)
}

预计对 updateSection() 的第一个函数调用会解析,并且只有在我对它的第二次调用之后才会传递。现在,它们都尝试同时执行,但只有前一个被执行。

最佳答案

对于同步执行,您可以使用actionChannel:https://redux-saga.js.org/docs/advanced/Channels.html

import { take, actionChannel, call, ... } from 'redux-saga/effects'

function* watchUpdateSection() {
// create a channel that is buffered with actions of these types
const chan = yield actionChannel([
sectionConstants.UPDATE_SECTION,
sectionConstants.HIDE_SECTION,
sectionConstants.PUBLISH_SECTION,
]);
while (true) {
// take from the channel and call the `updateSection` saga, waiting
// for execution to complete before taking from the channel again
const action = yield take(chan);
yield call(updateSection, action);
}
}

关于javascript - 如何在 saga 中解决第一个操作后执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673343/

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