在我的vuex模块我加载数据3次一步一步用3个不同的API请求一个使用then()
返回:Vuex - 来自不同模块的数据以随机顺序使用然后当()
actions: {
loadRoamingHistory: function loadRoamingHistory(context, roamingFilter): Promise<Array<RoamingHistoryEvent>> {
return new Promise((resolve) => {
store.dispatch('network/loadNetworks').then(() => {
store.dispatch('country/loadCountries').then(() => {
providerApi.loadRoamingHistory(roamingFilter).then(data => {
// read already loaded networks and countries from store
let networks = context.rootState.network.networks;
let countries = context.rootState.country.countries;
// .. some data processing using informations from
// networks and countries request, that are not allways available at this point..
console.log('data processing');
commitSetRoamingHistoryEvents(context, data.roamingHistoryEvent);
resolve();
}).catch(err => console.log(err));
});
});
});
}
}
我还添加了的console.log()命令到网络和国家vuex制定者为了看到什么首先执行:
mutations: {
setNetworks: function setNetworks(state: NetworkState, networks: Array<Network>) {
console.log('networks loaded');
state.networks = networks;
},
我预计3个请求而被执行一个接一个,但日志消息显示有时它会以不同的顺序执行,例如日志消息ES是这样的:
networks loaded countries loaded networks loaded data processing countries loaded
注意data processing
应该是最后的日志,否则我无法正确地处理数据。为什么它是以随机顺序执行的,为了修复它可以做些什么?
行动是异步的任何地方登录错误,突变不是'store.dispatch('network/loadNetworks')。那么(()...'不应该被需要。此外,promises并不意味着嵌套,而是后续。 – Daniel
它怎么可以改为后续? – Incredible