在我的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