El siguiente script devuelve la promesa, hay una matriz dentro de él con dos índices, quiero obtener el índice = 0 y el índice = 1 por separado y generarlos, ¿cómo puedo hacerlo sin usar console.log?
async function a1(callback) { var a = 2 + 2; return await [a, callback()]; } async function a2() { var b = 2 + 3; return await b; } console.log(a1(a2));
Mi pregunta para Artash Grigoryan
En javascript, las funciones asíncronas siempre devuelven una promesa.
No estoy completamente seguro de sus intenciones aquí, pero mirando su dibujo, supongo que necesita agregar una await
adicional en las líneas 3 y 9. Este código debería funcionar para usted:
async function a1(callback) { var a = 2 + 2; return await [a, await callback()]; } async function a2() { var b = 2 + 3; return await b; } await a1(a2);
Referencia: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
Realmente no entiendo por qué sin console.log
, pero puedes hacer esto:
async function main() { console.error(await a1(a2)); } async function a1(callback) { var a = 2 + 2; return await [a, callback()]; } async function a2() { var b = 2 + 3; return await b; } main();
a2
es una función asíncrona, por lo que callback()
no se resolverá aquí en esta instrucción return await [a,callback()]
.
Puede verificar si la devolución de llamada es del tipo AsyncFunction , si es así, puede esperar a que se resuelva antes de devolver el valor
async function a1(callback) { var a = 2 + 2; if (callback.constructor.name === 'AsyncFunction') { const m = await callback().then(val => val) return [a, m] } return await [a, callback]; } async function a2() { var b = 2 + 3; return await b; } a1(a2).then(d => console.log(d))