Estoy usando una API de pago y hay un método de devolución de llamada de la API que indicará el estado de la transacción.
async makePayment() { this.$launchFlutterwave({ tx_ref: Date.now(), amount: this.amount, currency: "KES", customer: { email: "user@gmail.com", phonenumber: this.user.phone_number, name: this.user.name, plot_unique_id: this.plot_unique_id }, callback: function(data) { console.log(data); this.registerPayment(data); }, customizations: { title: "", description: ", logo: "https://assets.piedpiper.com/logo.png" } }); }, async registerPayment(data) { console.log("hit"); await axios.post("/api/flutterwave/register/payment", data); }Dentro de esa devolución de llamada, quiero registrar un método
callback: function(data) { console.log(data); this.registerPayment(data); },y luego ese método publicará los datos recibidos y otros datos específicos del usuario en el back-end
async registerPayment(data) { console.log("hit"); await axios.post("/api/flutterwave/register/payment", data); } Pero cuando llamo al método dentro de la devolución de llamada, recibo el error Uncaught TypeError: this.registerPayment is not a function .
Eso es porque el contexto dentro de la devolución de llamada es diferente:
callback: function(data) { console.log(this); // you will see registerPayment doesnt exist here this.registerPayment(data); }, ¿Por qué no usar el pago de registerPayment directamente? Puedes hacerlo con:
callback: this.registerPayment Si aún desea llamar a registerPayment desde la callback de llamada, puede usar las funciones de flecha para acceder al contexto externo:
callback: (data) => { this.registerPayment(data); }