Показать сообщение отдельно
  #7 (permalink)  
Старый 27.09.2021, 22:21
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от voraa
Я считаю предыдущие решения некорректными, т.к. при вызове функций используется другой callback. Не сам runCallback
то есть вместо патча runCallback сделать патч console.log - это будет честнее?

имхо, раз уж runCallback и callback у функций не склеены изначально, то между ними и надо втыкать "мидлвар".

А в целом задача решается в одну строку, если не городить велосипеды:
// ----- условие --------------
function one(callback) {
    setTimeout( function() {
        callback("First");
    }, Math.random() * 100);
}

function two(callback) {
    setTimeout( function() {
        callback("Second");
    }, Math.random() * 100);
}

function three(callback) {
    setTimeout( function() {
        callback("Third");
    }, Math.random() * 100);
}

function runCallback(s) {
    console.log(s);
}

// ----- решение --------------
Promise.all([one, two, three].map(f => new Promise(f))).then(r => r.forEach(runCallback));
Ответить с цитированием