在我的示例Angular 2应用程序中,我使用ngrx / store和ngrx / effects进行状态管理.
addAuthor() { this.store.dispatch(addAuthorAction(this.fg.value)); console.log('2') }
在上面的代码“this.store.dispatch(addAuthorAction(this.fg.value));”中负责对服务器进行AJAX调用并添加新作者
数据库,工作正常.
因为“this.store.dispatch(addAuthorAction(this.fg.value));”是一个异步操作,即使在AJAX调用之前,也会执行console.log(“2”)语句
完成了.
解决方法
快速回答:你做不到.
正如你所说,dispatch是异步的.
你应该做的是使用@ngrx/effects.它与使用addAuthorAction几乎相同,除了不是调用一个函数,你“捕获”调度的动作,并在它们被减速器应用之后做一些事情.
所以我希望我一般来说,就是我将我的行动分成3个,例如:
– FETCH_USER
– FETCH_USER_SUCCESS
– FETCH_USER_ERROR
> FETCH_USER仅用于切换布尔值,因此我可以在获取用户时显示微调器
>我从效果中捕获此操作并发出http请求以获取用户
>如果http响应正常并且我有我正在寻找的信息,我从效果FETCH_USER_SUCCESS发送响应作为有效负载,否则我调度FETCH_USER_ERROR并且我将布尔值切换为false(所以我们可以尝试再次取回他)例如).
所以在你的例子中,如果你想在FETCH_USER_SUCCESS之后调试console.log,只需使用另一个效果来捕获FETCH_USER_SUCCESS并在此处执行你想做的事情.