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

它加载后触发InitialDataLoaded之类的动作。

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

在应用程序加载数据时,takeEvery(action)可以发送其他一些请求。如果目前无法获得初始数据,我将无法发送这些请求,因为如果没有初始数据,它们将毫无意义。

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

最佳答案

我不确定其他可发送给takeEvery的请求是否由UI发起(在这种情况下,如果要加载初始数据,则需要通过检查一些道具来禁用UI)。

但是,如果您正在讲故事,则可以等待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);
    }
  }
}

09-16 20:26