I am trying to console using a callback function, which itself is a callback function inside a setTimeout function. How can I get an orderly result?
I wish to have callback for f1 called, followed by f2 and finally f3, irrespective of their timer.
let f1 = (cb) => { 
    setTimeout(() => {
        cb(null, {a: 1})
    },100)
}
let f2 = (cb) => { 
    setTimeout(() => {
        cb(null, {a: 2})
    },50)
}
let f3 = (cb) => { 
    setTimeout(() => {
        cb(null, {a: 3})
    },10)
}
function parallelConsole(arr, cb) {
    let result = [];
    arr.forEach(func => {
        func((temp, val) => {
            console.log(val)
            result.push(val)
            if(arr.length === result.length) {
                cb(result)
            }      
        })
    })
}
parallelConsole([f1, f2, f3], (res) => {
    console.log(res) //[{a: 3}, {a: 2}, {a: 1}]
})
Expected Result: [{a: 1}, {a: 2}, {a: 3}]
Actual Result: [{a: 3}, {a: 2}, {a: 1}]
 
     
     
     
    