顺序调用 redux sagas
Calling redux sagas sequentially
这里是 Saga 菜鸟。我试图找到执行此操作的正确方法,但无法想出任何解决我问题的方法。
我有一个 saga,需要 API 调用才能做出决定。根据决定,我可能会进行重定向或分派另一个触发另一个传奇流程的操作。
export default function* applicationFlow(action) {
let data = { productInfo: {} };
try {
yield put(appStatusSwitch('busy', 'Processing', 'app-status.text.verifying'));
const res = yield call(api.call, data);
const decision = res.decision ? res.decision.toLowerCase() : null;
yield put(appDecision(decision));
switch (decision) {
case 'question':
yield put (appQuestions (res.questions));
// redirect to questions page
redirectTo ('/question-page');
break;
case 'pass':
case 'fail':
//dispatch an action that does another flow..yield takeLatest(APP_SUBMIT, processApplicationFlow)
yield put (submit ());
break;
default:
redirectTo('/technical-difficulty');
}
}
catch(e) {
redirectTo('/technical-difficulty');
}
finally {
yield put(appStatusSwitch('free'));
}
}
在上面的流程中,如何让 saga 等待 yield put(submit())
完成,然后此生成器中的流程继续到 finally
块?
如果我对你的问题的理解正确,你可以直接 call
processApplicationFlow
saga 而不是采取行动。
您的 case
看起来像这样:
case 'fail':
yield call(processApplicationFlow)
break
call
将阻塞直到另一个 saga 完成。
希望我的回答对您有所帮助。
这里是 Saga 菜鸟。我试图找到执行此操作的正确方法,但无法想出任何解决我问题的方法。
我有一个 saga,需要 API 调用才能做出决定。根据决定,我可能会进行重定向或分派另一个触发另一个传奇流程的操作。
export default function* applicationFlow(action) {
let data = { productInfo: {} };
try {
yield put(appStatusSwitch('busy', 'Processing', 'app-status.text.verifying'));
const res = yield call(api.call, data);
const decision = res.decision ? res.decision.toLowerCase() : null;
yield put(appDecision(decision));
switch (decision) {
case 'question':
yield put (appQuestions (res.questions));
// redirect to questions page
redirectTo ('/question-page');
break;
case 'pass':
case 'fail':
//dispatch an action that does another flow..yield takeLatest(APP_SUBMIT, processApplicationFlow)
yield put (submit ());
break;
default:
redirectTo('/technical-difficulty');
}
}
catch(e) {
redirectTo('/technical-difficulty');
}
finally {
yield put(appStatusSwitch('free'));
}
}
在上面的流程中,如何让 saga 等待 yield put(submit())
完成,然后此生成器中的流程继续到 finally
块?
如果我对你的问题的理解正确,你可以直接 call
processApplicationFlow
saga 而不是采取行动。
您的 case
看起来像这样:
case 'fail':
yield call(processApplicationFlow)
break
call
将阻塞直到另一个 saga 完成。
希望我的回答对您有所帮助。