我有一个Web应用程序,首先加载需要1-10秒的数据。
我会在应用启动后立即显示完整的用户界面(地图),然后在后台启动下载。
在下载数据时,我想延迟一些效果,例如显示路线和搜索结果。)
在加载数据后,任何在加载数据时去掉的操作(比如用户类型搜索词)都将被执行。
所以:
App Starts
forks data download in background
shows UI
lets user type -> debounce --> execute only after data has downloaded
show more (route etc.) once download is complete
我们如何在saga中执行此操作 - 我认为这是完成此类任务的最强大的框架。我没有将此视为标准模式之一,但我认为这将非常普遍。
答案 0 :(得分:0)
这样的事情怎么样:
function* fetchInitData(){}
function* setupLocale(){}
function* submit(value){
while(yield !select(state=>state.started)){
yield delay(100);
}
yield call(fetch,...)
}
function* startSaga(){
yield all[
call(fetchInitData),
call(setupLocale),
delay(3000) // Wait at least 3 seconds
]
yield put({
type: "APP_STARTED",
});
}
只需使用{started:false}
初始化您的redux商店应用并减少APP_STARTED
操作。