Quiero hacer un hash de base64 a base16 y poner el resultado en una matriz kvp. Aquí mi código (la base64 utilizada aquí es hipotética, es para mostrarle el problema):
async function hashData() { let base64 = 'sertyuiopnbv58426931'; let hash = await window.crypto.subtle.digest('SHA-256', _base64ToArrayBuffer(base64)); const hashArray = Array.from(new Uint8Array(hash)); const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); console.log(hashHex); return hashHex; } function _base64ToArrayBuffer(mybase64) { let binary_string = window.atob(mybase64); let len = binary_string.length; let bytes = new Uint8Array(len); for (let i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); } return bytes.buffer; } function GetClubData () { let kvp = {}; kvp['picture'] = hashData(); let kvp2 = {}; kvp2['Club'] = kvp; var json = JSON.stringify(kvp2,null," "); console.log(json); } <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title> Test </title> <link rel="stylesheet" href="test1.css"/> </head> <body> <button onclick="GetClubData()" > Get Club Data </button> <script src="../mylibrary/js/updateClub.js"></script> </body>En mi consola no hay resultado de 'imagen'. Alguna idea ?
hashData es una función asíncrona, que debe esperar. El valor en su "kvp" es una Promesa, que no puede ser JSON serializado por defecto.
su función hashData es una función asíncrona y debe escribir awite si desea acceder al valor devuelto de esta manera
function GetClubData () { putInArray(); } async function putInArray() { let kvp = {}; kvp['picture'] = await hashData(); let kvp2 = {}; kvp2['Club'] = kvp; var json = JSON.stringify(kvp2,null," "); console.log(json) }Si lo entiendo correctamente, está tratando de usar el resultado de una función asíncrona hashData dentro de la función normal GetClubData . No puedes hacer esto. Para solucionarlo, haga que la función GetClubData asíncrona y espere el resultado de la función asíncrona hashData . Aquí está el código correcto,
async function GetClubData () { let kvp = {}; kvp['picture'] = await hashData(); let kvp2 = {}; kvp2['Club'] = kvp; var json = JSON.stringify(kvp2,null," "); console.log(json); } Ejecutar la función GetClubData produce el resultado,
Además, llame a la función a través del atributo onclick , onclick="GetClubData()"