Показать сообщение отдельно
  #2 (permalink)  
Старый 27.09.2021, 15:35
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Эту задачу можно понимать по разному.
В простейшем варианте вы вызываете следующую функцию из runCallback когда закончилась предыдущая.

Но можно и такое изобразить:
function stream(log, ...args) {
  let index = 0;
  const results = new Map();
  const callback = (i, result) => {
    if(i === index) {
      while(true) {
        log(result);
        if(!results.has(++index))
          break;
        result = results.get(index);
        results.delete(index);
      }
    } else {
      results.set(i, result);
    }
  };
  
  args.forEach((func, i) => func(result => callback(i, result)));
}

stream(runCallback, one, two, three)
получив максимальную возможную скорость вызовов.
__________________
29375, 35
Ответить с цитированием