Я считаю предыдущие решения некорректными, т.к. при вызове функций используется другой callback. Не сам runCallback
Предлагаю свое решение
function one(callback) {
setTimeout( function() {
callback("First");
}, Math.random() * 1000);
}
function two(callback) {
setTimeout( function() {
callback("Second");
}, Math.random() * 1000);
}
function three(callback) {
setTimeout( function() {
callback("Third");
}, Math.random() * 1000);
}
function runCallback(s) {
console.log(s);
}
let console;
function call (...funs) {
const cl = window.console.log
let i = 0
console = {
log (...args) {
cl(...args)
if (i<funs.length)
funs[i++](runCallback)
else
console = window.console;
}
}
funs[i++](runCallback)
}
call(one, two, three)