(Se cerró una versión anterior de esta pregunta como un dup de cómo invocar funciones asíncronas en un bucle. Esta versión establece claramente que las funciones no son asíncronas)
Tengo varias funciones de estilo de devolución de llamada que no se pueden modificar. Solo cambiando la función ABC, ¿cómo puedo obtener la salida en el mismo orden que la función presente en la variable D? Intenté usar async-await pero obtuve el resultado como ['123', 'ankit', '345'] debido al evento de tiempo de espera.
https://jsfiddle.net/ankigg1602/unrxv3k6
const A = (dev) => { setTimeout(() => { dev('ankit') }, 300) } const B = (dev) => { setTimeout(() => { dev('123') }, 50) } const C = (dev) => { setTimeout(() => { dev('345') }, 500) } const D = [A, B, C] const ABC = (args, dev) => { // write your code here Promise.all(D.map(async (fun1) => { return await fun1(dev) })) } ABC(D, (result) => { console.log('result:', result) // ['ankit', 123, 345] })La idea es prometer las funciones de estilo de devolución de llamada. A continuación, se crea una promesa para cada uno que se resuelve cuando la función llama a su devolución de llamada.
Asigne sobre promisfy para producir una matriz de funciones asíncronas. Invoque a cada uno de ellos para recopilar una serie de promesas, luego resuelva las promesas simultáneamente con Promse.all()
const A = (dev) => { setTimeout(() => { dev('ankit') }, 300) } const B = (dev) => { setTimeout(() => { dev('123') }, 50) } const C = (dev) => { setTimeout(() => { dev('345') }, 500) } const D = [A, B, C] const ABC = async(args, dev) => { const promisify = fn => () => new Promise(resolve => fn(resolve)); const promises = args.map(fn => promisify(fn)()); Promise.all(promises).then(dev) } ABC(D, (result) => { console.log('result:', result) // ['ankit', 123, 345] })