Ну если воспользоваться идеями
Aetae и
Alexandroppolus и попытаться объединить их, то получается такой вариант
function one(callback) {
setTimeout( function() {
callback("First");
}, Math.random() * 1000);
}
function two(callback) {
setTimeout( function() {
callback("Second");
}, Math.random() * 500);
}
function three(callback) {
setTimeout( function() {
callback("Third");
}, Math.random() * 100);
}
function runCallback(s) {
console.log(s);
}
async function stream(log, ...args) {
const ap = args.map (func => new Promise(func))
for (let i = 0; i < args.length; i++) {
log(await ap[i])
}
}
stream(runCallback, one, two, three)