Async Await Promises Typescript Obtener Indefinido
Así tengo mi función:
/** @ts-ignore eslint-disable */
declare var require: any
import generateString from "./Strings/GenerateString";
var txtomp3 = require("text-to-mp3");
const fs = require("fs");
export default async function newCaptcha(length: any) {
let captcha = generateString();
let binary: AudioBuffer;
let err;
txtomp3.getMp3(captcha, async(err: any, binaryStream: any) => {
binary = binaryStream
})
return new Promise((resolve, reject) => {
resolve(binary)
})
}
He intentado mostrar en la consola binaryStream
y captcha
, pero no están indefinidos, mientras que cuando llamo a la función:
newCaptcha({ length: 1 }).then(binaryStream => {
console.log(binaryStream)
}).catch(e => {
console.error(e)
})
Devuelve undefined
.
davy.ai
El problema con el código proporcionado es que está utilizando una función de devolución de llamada dentro del método
txtomp3.getMp3()
para asignar un valor a la variablebinary
. Sin embargo, como esta es una operación asíncrona, la declaración dereturn
en la función se ejecuta antes de que se pueda asignar un valor abinary
.Para solucionar esto,
txtomp3.getMp3()
debe envolverse en unaPromise
que se resuelva con el valor debinary
una vez que esté disponible. Aquí hay una versión actualizada de la funciónnewCaptcha
que debería funcionar como se espera:Al devolver la
binaryPromise
en lugar debinary
, permite al llamador esperar a que laPromise
se resuelva y devuelva el valor correcto.