跳至主要内容

并行运行任务

yield 语句非常适合以线性方式表示异步控制流,但我们也需要并行执行操作。我们不能写

// wrong, effects will be executed in sequence
const users = yield call(fetch, '/users')
const repos = yield call(fetch, '/repos')

因为第二个效果只有在第一个调用解析后才会执行。相反,我们必须写

import { all, call } from 'redux-saga/effects'

// correct, effects will get executed in parallel
const [users, repos] = yield all([
call(fetch, '/users'),
call(fetch, '/repos')
])

当我们生成一个效果数组时,生成器会被阻塞,直到所有效果都解析或只要有一个被拒绝(就像Promise.all的行为一样)。