redux-saga - 具有 1 个异步依赖于另一个的服务器端渲染

redux-saga - Server-Side rendering with 1 async dependent on another

我正在尝试通过 END 效果让我的应用程序在服务器端呈现(https://github.com/redux-saga/redux-saga/issues/255 上的详细信息,并解释了为什么这如此棘手)。

我的数据依赖于 2 个异步请求:getJwtToken -> (with token data) FetchItem -> now render.

这可能吗?

我花了很多时间查看频道(此处 https://redux-saga.js.org/docs/advanced/Channels.html),但无法获得任何变化。

我的 Saga 看起来像这样(LOAD_USER_PAGE 最初被解雇)

function* loadUserPage() {
  yield put({type: 'JWT_REQUEST'})
  const { response } = yield call(fetchJwtToken)
  if (response) {
    yield put({type: 'JWT_REQUEST_SUCCESS', payload: response})
  }
}

function* fetchItem() {
  console.log('NEVER GETS HERE')
}

function* watchLoadPage() {
    yield takeLatest('LOAD_USER_PAGE', loadUserPage);
}

function* watchFetchItem() {
  yield takeLatest('JWT_REQUEST_SUCCESS', fetchItem);
}

export default function* rootSaga() {
  yield all([
    fork(watchLoadPage)
    fork(watchFetchItem)
  ])
}

我相信我明白为什么它不起作用(由于 END 事件触发仅终止那些已经开始的效果,并且由于我的第二个效果在我的第一个效果回来之前不会被触发,所以它不包含在 runSaga().done承诺。

By 不起作用我的意思是操作 JWT_REQUEST_SUCCESS 被触发并且 runSaga.done 承诺运行。但是我在 console.log 中的消息没有被触发。

我认为将两个请求都放在同一个函数中是可能的,但我正在尝试抽象出令牌授权部分。

怎么都不可能吗?

真的卡住了。

编辑: 解决方案是按照 https://github.com/redux-saga/redux-saga/issues/255#issuecomment-323747994 and https://github.com/redux-saga/redux-saga/issues/255#issuecomment-334231073.

评论中的建议使用频道

所有人的SSR :)