Estoy llamando a una función de javascript para inicializar un valor variable en Oracle Visual Builder (VBCS). La función toma los datos binarios como entrada y necesita devolver la cadena convertida en Base64 de forma síncrona para que la cadena convertida en Base64 se asigne a la variable VBCS.
La función no devuelve la cadena convertida Base64. ¿Cómo hago para que devuelva la cadena Base64 a la función de llamada?
PageModule.prototype.convertbase64 = function (data) { const blob = new Blob([data], { type: "application/octet-stream" }); function blobToBase64(blob) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(blob); reader.onloadend = () => resolve(reader.result.toString().substr(reader.result.toString().indexOf(',') + 1)); reader.onerror = error => reject(error); console.log(new Date()); }); }; const retstring = blobToBase64(blob).then(finalString => { return finalString }); console.log('retstring value', retstring); return retstring; };el problema esta en esta linea
const retstring = blobToBase64(blob).then(finalString => { return finalString });Debe esperar el resultado de blobToBase64 y hacer que la función convertbase64 sea asíncrona.
const retstring = await blobToBase64(blob);Aquí hay un ejemplo completo.
PageModule.prototype.convertbase64 = async function (data) { const blob = new Blob([data], { type: "application/octet-stream" }); function blobToBase64(blob) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(blob); reader.onloadend = () => resolve(reader.result.toString().substr(reader.result.toString().indexOf(',') + 1)); reader.onerror = error => reject(error); console.log(new Date()); }); }; const retstring = await blobToBase64(blob); console.log('retstring value', retstring); return retstring; };