Это загадка, которую вы должны решить, не имея доступа к аргументам.Возвращенная функция из printCall
уже имеет waitingTime
в замыкании.Хитрость заключается в том, чтобы расположить обратные вызовы в правильном порядке, чтобы они вызывались во вложенном порядке.
Вот один из способов:
'use strict';
function printCall(waitingTime) {
return function(callback) {
setTimeout(() => {
console.log(`${waitingTime}ms have passed`);
if (callback) {
callback();
}
}, waitingTime);
}
}
function callOneByOne($$, $) {
// pretty huh?
return _ => $$(() => $(_))
}
let calls = [printCall(3000), printCall(2000), printCall(4000)];
(calls.reduce((__, _) => callOneByOne(__, _), _ => _()))();