reactjs - MobX 在异步操作后运行函数
问题描述
我有一个 MobX 问题,因为我想调用onSortHandler
以及在我的商店中loadingCallback
执行异步操作之后,但由于异步操作,调用顺序未对齐。该问题增加的复杂性在于onSortHandler
触发了一个函数,该函数使用由给定操作计算的计算值。
这是我在商店中的操作:
loadFurniturePage = async (pageNumber: number, pageAmount: number) => {
const nextPage = await agent.FrontEnd.getNextFurniturePage(pageNumber, pageAmount); <-- I suppose while waiting here, the finally block get called. (See it below)
nextPage.forEach((furniture: IFurniture) => {
furniture.type = furniture.typeInString;
this.furnitureMap.set(furniture.id, furniture)
});
}
这是我调用上述操作的地方:
loadFurniturePage(pageNumber, pageAmount).finally(() => { <-- this code block should be called after the action finishes it's running.
onSortHandler(selectedSortByValue);
loadingCallback(false);
});
这是我调用时使用的计算值onSortHandler
:
get getAllFurniture() {
return Array.from(this.furnitureMap.values())
}
有没有人有想法,如何解决这个问题?
解决方案
async
如果您继续更改 mobx 可观察对象,则在函数调用之后,将该代码包装在runInAction
loadFurniturePage = async (pageNumber: number, pageAmount: number) => {
const nextPage = await agent.FrontEnd.getNextFurniturePage(pageNumber, pageAmount);
runInAction(()=>{
nextPage.forEach((furniture: IFurniture) => {
furniture.type = furniture.typeInString;
this.furnitureMap.set(furniture.id, furniture)
});
})
}
loadFurniturePage(pageNumber, pageAmount).finally(() => {
runInAction(()=>{
onSortHandler(selectedSortByValue);
loadingCallback(false);
})
});
推荐阅读
- java - 从 google 获取超过 1000 个索引链接
- reactjs - WEBPACK_IMPORTED_MODULE_5__.default.firestore.collection 不是
- angular - Keyloak-angular (https://github.com/mauriciovigolo/keycloak-angular) - 注册 - CORS 错误
- reactjs - 防止按下退出按钮
- azure - Azure AppConfiguration(在本地使用 DefaultAzureCredential)不返回任何键
- flutter - 下载开始后立即在 Android 上出现 Flutter_downloader HardCrash
- javascript - 如何将 inlineformset 工厂与 javascript 一起使用?
- android - 在适配器 android studio 中显示和隐藏菜单
- android - 在片段启动之前如何在 android 中显示弹出窗口
- mongodb - Mongoose 如何停止使用 _id (不要存储它)并改用 id