首页 > 解决方案 > Redux saga - 加入和所有效果之间的区别

问题描述

Redux Sagajoin和in有什么区别?all

function* fetchUserData(userId) {
  const postsTask = yield fork(fetchAlbums, userId)
  const albumsTask = yield fork(fetchPosts, userId)
  
  yield join([postsTask, albumsTask])
}
function* fetchUserData(userId) {
  const postsTask = yield fork(fetchAlbums, userId)
  const albumsTask = yield fork(fetchPosts, userId)
  
  yield all([postsTask, albumsTask])
}

似乎他们俩都只是同步了几个任务。

标签: reduxreact-reduxredux-saga

解决方案


简而言之,一个是“同步”/,join另一个是“异步”/ all

查看文档:

join([...tasks])= 它将任务数组包装在连接效果中,大致相当于yield tasks.map(t => join(t))- https://redux-saga.js.org/docs/api/#jointask

join将解决加入任务的相同结果(成功或错误)。如果加入的任务被取消,取消也会传播到执行加入效果的 Saga。同样,这些加入者的任何潜在呼叫者也将被取消。

和:

all([...effects]) - parallel effects= 创建一个效果描述,指示中间件并行运行多个效果并等待它们全部完成。这是与标准相当对应的 API Promise#all- https://redux-saga.js.org/docs/api/#alleffects---parallel-effects


推荐阅读