beforeTabSwitch: async (tab) => { let flag = false; if (tab === 'PAYMENT') { if (this.isManualValidated) { flag = true; this.savePayment().then((response) => { this.placeOrder(); }); } } return flag; } savePayment: async function () { this.$http.post(this.savePaymentRoute) .then(response => { await this.getOrderSummary(); }) .catch(error => { }); }, placeOrder: async function () { this.$http.post(this.saveOrderRoute) .then(response => { }) .catch(error => { console.log('placeOrder | ' + error); }) },Cuando se hace clic en el botón Realizar pedido beforeTabSwitch (), que valida los datos y luego llama a savePayment (). como la solicitud de savePayment está completa, llame a getOrderSummary () y luego llame a placeOrder () request.
Orden de llamada: savePayment() > getOrderSummary() > placeOrder()
pero el problema es después de ejecutar savePayment() inmediatamente, la ejecución de placeOrder() comienza después de completarse y luego se ejecuta getOrderSummary(), lo cual es incorrecto.
Ya probé con Promises, devolución de llamada pero el mismo problema. 
Tienes que empezar a escribir un código limpio. Y debe usar el enfoque de promesas o el enfoque de espera asincrónica. Espero que este código te ayude:
beforeTabSwitch: async (tab) => { if (tab !== 'PAYMENT') { return false; } if (!this.isManualValidated) { return false; } try { const response = await this.savePayment(); this.placeOrder(); } catch (error) { console.log(error); } return true; }, savePayment: async function () { try { const paymentResponse = await this.$http.post(this.savePaymentRoute); const summaryResponse = await this.getOrderSummary(); } catch (error) { console.log(error); } }, placeOrder: async function () { try { const response = await this.$http.post(this.saveOrderRoute); } catch (error) { console.log('placeOrder | ' + error); } },