He estado implementando un sistema de comercio electrónico pero tengo un problema con la API de pago de iyzipay. Realizo una solicitud exitosa y obtengo una respuesta del servidor, pero no puedo almacenar los datos que provienen del servidor. alguien ayuda?
let returnedData = {} iyzipay.payment.create(paymentRequest, function (err, result) { if (err) { return next(new CustomError("Ödeme başarısız.", 500)) } return returnedData = result }) //ı can't see data here and return empty {} console.log(returnedData) // but ı can see here when ı wait 1 second setTimeout(() => { console.log(returnedData) }, 1000);Como está llamando a una función async , debe await su resultado. Es por eso que su primer registro de la consola no imprime el resultado y después de 1 segundo sí lo hace, porque en ese tiempo (+ el tiempo de ejecución de la pila) está obteniendo el resultado
La función que se puede await ed:
function createPayment(paymentRequest) { return new Promise((resolve, reject) => { iyzipay.payment.create(paymentRequest, function (err, result) { if (err) reject(new CustomError("Ödeme başarısız.", 500)); resolve(result); }); }); }En general:
(async () => { const request = {/* whatever */}; try { const res = await createPayment(request); console.log(res); // Now it's here } catch(e) { console.error(e); } })();Probablemente esté en una ruta, por lo que el código real sería:
app.use('/payment', async (req, res, next) => { try { const result = await createPayment(req); console.log(result); // Now it's here res.end(); } catch(e) { next(e); } })Se llama a su primera consola antes de que se complete la solicitud. Cuando se espera 1 segundo, la solicitud se completa y la respuesta se almacena en la variable returnData. Entonces, para su requisito, intente usar la promesa o llame a una función para almacenar la respuesta de la función de creación de pago con la respuesta como parámetro.