我有一些在应用程序启动时从服务器加载的初始数据。
它加载后触发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);
}
}
}