5 reactjs redux redux-saga react-redux
我有以下情况:
export function* addCircle(circleApi, { payload }) {
try {
const response = yield apply(
circleApi,
circleApi.addCircle,
[payload]
);
if (response.error_type) {
yield put(addCircleFailedAction(response.error));
} else {
yield put(addCircleSucceededAction(response));
}
} catch (err) {
console.error(err);
}
}
export function* addTender(tenderApi, { payload }) {
try {
// NOTE: I want this to finish before continuing with rest of saga below.
yield call(addCircleAction(payload.circlePayload));
// Rest of saga removed for brevity.
} catch (err) {
console.error(err);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,基本上addCircle是在进行API调用,并根据其成功调用适当的redux操作。现在,在另一个传奇中,我将负责addCircle传奇的动作称为“动作” ,我希望它在继续执行其余传奇之前完成执行。我尝试使用call,但它基本上不等待addCircle传奇完成执行。有什么方法可以等待吗?我addCircle从组件内部调用,不需要等待,但是在这种特定情况下,我必须在传奇中调用它,因此我真的需要等待它完成执行,更改应用程序的状态,以便我可以在其余的addTender传奇中使用更新后的状态。有任何想法吗?
根据您的代码片段,您的addCirclesaga 将在完成执行之前分派addCircleFailedAction或addCircleSucceededAction动作创建者。所以我们将不得不等待你的addTender传奇中的那些行动。
基本上,这就是你应该做的。我只是根据动作创建者的名字猜测你的动作类型。
yield call(addCircleAction(payload.circlePayload));
yield take([ADD_CIRCLE_FAILED_ACTION, ADD_CIRCLE_SUCCEEDED_ACTION]);
// Rest of the saga
Run Code Online (Sandbox Code Playgroud)
但是有一种边缘情况。你没有在catch你的addCircle传奇区块中发送任何动作。也许你可以调度一个名为addCircleExceptionActioninside catchblock的动作并等待它以及其他动作,如下所示:
yield take([ADD_CIRCLE_FAILED_ACTION, ADD_CIRCLE_SUCCEEDED_ACTION, ADD_CIRCLE_EXCEPTION_ACTION]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3641 次 |
| 最近记录: |