const data = yield all([
// @TODO: Should be use action function.
yield put({
type: '@@app/PCPNAME/QUERY',
payload: {},
}),
yield put({
type: '@@app/PCPREGIONNAME/QUERY',
payload: {},
}),
yield put({
type: '@@app/PCPGROUPNAME/QUERY',
payload: {},
}),
yield put({
type: '@@app/SERVICETYPE/QUERY',
payload: {},
}),
yield put({
type: '@@app/PCPPRIMARYSPECIALTY/QUERY',
payload: {},
}),
])
console.log('DATA >>>', data)
当我运行此功能时,“ DATA >>>”将在诸如“ @@ app / PCPPRIMARYSPECIALTY / QUERY”,“ @@ app / PCPNAME / QUERY”之类的动作之前运行。...
如何等待所有动作完成?
已更新
操作示例:@@app/SERVICETYPE/QUERY
takeLatest('@@app/SERVICETYPE/QUERY', query)
...
function* query(action: any) {
try {
const resData = yield call(axios.get('/myserver'))
yield put(saveDataInStorage(resData))
} catch (err) {
}
}
答案 0 :(得分:1)
您的操作不会返回生成器函数。只需将操作分派到其他中间件,reducers以及最终take
的所有sagas的redux流中。 put
的返回值只是操作。
因此,一旦分派了动作,all
块就完成了-不管获得take
的任何动作是否已经完成。
如果您要并行运行一堆其他的sagas并阻塞直到它们全部完成,您可以调用其他的sagas,并按照{{3 }}:
产生一个嵌套的生成器数组将并行启动所有子生成器,等待它们完成,然后恢复所有结果
all
function* mainSaga(getState) {
const results = yield all([call(task1), call(task2), ...])
yield put(showResults(results))
}
答案 1 :(得分:0)
从文档all
起,效果已经接受了效果。因此,您的代码中的问题是yield
之前的put
。
const data = yield all([
// @TODO: Should be use action function.
put({
type: '@@app/PCPNAME/QUERY',
payload: {},
}),
put({
type: '@@app/PCPREGIONNAME/QUERY',
payload: {},
}),
put({
type: '@@app/PCPGROUPNAME/QUERY',
payload: {},
}),
put({
type: '@@app/SERVICETYPE/QUERY',
payload: {},
}),
put({
type: '@@app/PCPPRIMARYSPECIALTY/QUERY',
payload: {},
}),
])
console.log('DATA >>>', data)
应该工作