Configuré un websocket que lee todas las direcciones de correo electrónico como backend y las envía al cliente. Ahora quiero que el espacio de memoria utilizado se envíe junto con la cuota. mysql-Query da como resultado una matriz con varias cadenas JSON (resultados):
{ id: 10, domain_id: 6, email: 'mailadress', password: 'password', quota: 5368709120, crypt: 2, wsplx: 'customer', quota_used: undefined }Como valor adicional, quiero ingresar "quota_used". Es por eso que escribí el siguiente código:
for (value of results) { console.log(get_used_quota(value.email)) value.quota_used = get_used_quota(value.email); } socket.emit("response_get_update_mails", (results)); function get_used_quota(email) { var mailadress_arr = email.split("@"); var cmd = "du -sb /var/vmail/" + mailadress_arr[1] + "/" + mailadress_arr[0] + "/Maildir/"; exec(cmd, (error, stdout, stderr) => { if (error) { showtoaster("\"" + `${error.message}` + "\"", "Ein Fehler ist aufgetreten!", "warning", true, true, 3000) return; } if (stderr) { showtoaster("\"" + `${stderr}` + "\"", "Ein Fehler ist aufgetreten!", "warning", true, true, 3000) return; } var output = `${stdout}`; var size_arr = output.split("\t"); size = parseInt(size_arr[0]); return size }) }El problema es que no puedo obtener el valor "tamaño" de la función de flecha. El valor de retorno de la función permanece indefinido. ¿Alguien puede ayudarme a solucionar este problema, esto sería muy bueno? Avísame, si necesitas más información.
Puedes envolver esa llamada en una promesa:
function get_used_quota(email) { var mailadress_arr = email.split("@"); var cmd = "du -sb /var/vmail/" + mailadress_arr[1] + "/" + mailadress_arr[0] + "/Maildir/"; return new Promise(resolve => { exec(cmd, (error, stdout, stderr) => { if (error) { showtoaster("\"" + `${error.message}` + "\"", "Ein Fehler ist aufgetreten!", "warning", true, true, 3000) return; } if (stderr) { showtoaster("\"" + `${stderr}` + "\"", "Ein Fehler ist aufgetreten!", "warning", true, true, 3000) return; } var output = `${stdout}`; var size_arr = output.split("\t"); size = parseInt(size_arr[0]); resolve(size); }); }); }y esperar el resultado
value.quota_used = await get_used_quota(value.email);