我是 javascript 和 Vuex 的新手。
我Orders在一個表中有很多(鏈接到state.runningOrders.data),然后我選擇了這些訂單并取消了它們(從而觸發了CANCEL_ONE_ORDER)。當來自服務器的回應到達時,我只是從陣列中洗掉了具有指定 id 的訂單,因此腐蝕的行將從表中消失。取消后應該沒有行。但是,從視覺上看,rows表中總有一些剩余。
我認為它像多執行緒或協程一樣作業。所以state.runningOrders.data需要一些并發機制。
const actions = {
async [CANCEL_ONE_ORDER](context, data) {
const data_res = await RestClient.get("cancel_one_order", data.id "/" data.coin1 "/" data.coin2);
context.commit(CANCEL_ONE_ORDER_END, data_res.data);
},
}
const mutations = {
[CANCEL_ONE_ORDER_END](state, res) {
state.runningOrders.data = state.runningOrders.data.splice(state.runningOrders.data.findIndex(item => item.id === id), 1);
},
}
如何以原子方式(同時)從陣列中洗掉元素?
uj5u.com熱心網友回復:
我認為它像多執行緒或協程一樣作業。
不,JavaScript 每個領域(大致上,每個全域環境)運行一個執行緒。您可以擁有多個執行緒,但除了顯式共享記憶體之外,它們無法訪問相同的資料結構(相反,它們通過訊息傳遞進行通信)。(async函式中的邏輯可以重疊,如果函式 A 在 a 處暫停await而函式 B 繼續。)
splice回傳已洗掉元素的陣列。Yopu 在此處將其分配回您的變數:
state.runningOrders.data = state.runningOrders.data.splice(state.runningOrders.data.findIndex(item => item.id === id), 1);
這與您似乎想要的相反:它data使用您從中洗掉的元素陣列進行更新,而不是使用您想要保留的元素。
相反,使用filter:
state.runningOrders.data = state.runningOrders.data.filter(item => item.id !== id);
這將從與回呼測驗匹配的元素(在這種情況下,沒有匹配的元素)創建一個新陣列id。
uj5u.com熱心網友回復:
我不確定我是否完全理解,但聽起來您正試圖從表中洗掉一行(因此,可能是資料庫中的一個物件),結果卻是一個空行。
根據該描述,在我看來,您并不是在洗掉物件,而只是擦除了物件中的資料。然后你會留下一個空白物件,它正在創建你的空行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345107.html
標籤:javascript Vuex
