如何确保在使用Saga触发某些操作后执行所有操作?

问题描述 投票:0回答:1

我有一些在应用程序启动时从服务器加载的初始数据。

它加载然后触发像InitialDataLoaded这样的动作。

此数据将保存到某个状态,并用于将来与服务器的所有通信。

当应用程序加载该数据时,takeEvery(action)可以发送一些其他请求。如果暂时没有初始数据,我无法发送这些请求,因为如果没有初始数据,这些请求就没有意义。

如何确保所有相关操作仅在触发所需操作时才会引发请求?

javascript redux redux-saga
1个回答
1
投票

我不确定是否可以发送给takeEvery的其他请求是由UI启动的(在这种情况下,如果加载了初始数据,你可以通过检查一些prop来禁用UI)。

但是如果你在saga中讨论,你可以等待这样的InitialDataLoaded动作:

function* watchAppInit() {
  while (true) {
    // when this completes it dispatches the InitialDataLoaded action
    yield fork(loadInitialData); 

    yield take(actionTypes.InitialDataLoaded);

    // this won't execute until InitialDataLoaded action is dispatched
    yield fork(doOtherStuff);
  }
}

或者您可以检查其他操作中的状态:

function* watchDoOtherStuff() {
  while (true) {
    const action = yield take(actionTypes.DO_OTHER_STUFF);

    // check the state to see if you have initial data
    const initialized = yield select(selectors.getInitialDataLoaded);

    if (initialized) {
      yield fork(doIt);
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.