同時執行多個任務

yield 語句可以很簡單的表達非同步的控制流程,但是我們也需要做一些同步的事情,我們不能只簡單撰寫:

// 錯誤寫法,effect 將按照順序的被執行
const users = yield call(fetch, '/users'),
      repos = yield call(fetch, '/repos')

因為第二個 effect 將直到第一個呼叫 resolve 後才執行,所以我們應該這樣撰寫:

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

// 正確寫法,effect 將同步被執行
const [users, repos] = yield all([
  call(fetch, '/users'),
  call(fetch, '/repos')
])

當我們 yield 一個 effect 的陣列,generator 是被阻塞的,直到所有 effect 都被 resolve 或者是被 reject(就像 Promise.all 的行為)。

results matching ""

    No results matching ""