Soy nuevo en javascript y Vuex.
Tengo muchos Orders en una tabla (vinculados a state.runningOrders.data ), luego seleccioné estos pedidos y los cancelé (por lo tanto, active CANCEL_ONE_ORDER ). Cuando llegó la respuesta del servidor, simplemente eliminé el pedido con la identificación especificada de la matriz, por lo que la fila corroída desaparecerá de la tabla. No debe haber filas después de cancelar. Sin embargo, visualmente, siempre quedan algunas rows en la tabla.
Creo que funciona como múltiples subprocesos o coroutine. Entonces state.runningOrders.data necesita algún mecanismo de concurrencia.
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); }, }¿Cómo eliminar el elemento de la matriz atómicamente (al mismo tiempo)?
Creo que funciona como múltiples subprocesos o coroutine.
No, JavaScript ejecuta un solo subproceso por dominio (aproximadamente, por entorno global). Puede tener varios subprocesos, pero aparte de la memoria compartida explícita, no pueden acceder a las mismas estructuras de datos (en cambio, se comunican a través de mensajes). (La lógica en las funciones async puede superponerse, si la función A se detiene en await y la función B continúa).
splice devuelve una matriz de los elementos eliminados . Yopu está asignando eso de vuelta a su variable aquí:
state.runningOrders.data = state.runningOrders.data.splice(state.runningOrders.data.findIndex(item => item.id === id), 1); Eso hace lo contrario de lo que parece querer: actualiza data con una matriz de los elementos que eliminó de ellos, en lugar de los que desea conservar.
En su lugar, utilice filter :
state.runningOrders.data = state.runningOrders.data.filter(item => item.id !== id); Eso crea una nueva matriz a partir de los elementos que coinciden con la prueba de devolución de llamada (en este caso, los que no tienen una id coincidente).
No estoy seguro de entender completamente, pero parece que está tratando de eliminar una fila de una tabla (por lo tanto, probablemente un objeto de la base de datos) y está terminando con una fila en blanco.
A partir de esa descripción, me parece que no está eliminando el objeto, sino simplemente borrando los datos dentro del objeto. Luego te queda un objeto en blanco, que está creando tu fila vacía.