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

时间:2017-10-04 16:14:33

标签: reactjs redux redux-saga serverside-rendering saga

我正试图通过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)并且无法使用任何变体。

我的传奇看起来像这样(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事件被触发只终止那些已经开始的效果,并且因为我的第二个效果在我第一次回来之前不会被触发,所以它不包括在{ {1}}承诺。

通过不工作我的意思是动作runSaga().done被触发并且JWT_REQUEST_SUCCESS承诺运行。但是我在console.log中的消息没有被触发。

我认为通过在同一个函数中同时使用这两个请求是可能的,但我试图将令牌auth部分抽象出来。

以任何方式都不可能吗?

真的卡住了。

1 个答案:

答案 0 :(得分:1)