JSFiddle - React, Tailwind, and code Playground

JavaScript

function log(s) {
    var line = document.createElement('div');
    line.textContent = s;
    document.body.appendChild(line);
}

function emitter(clb) {
	function emit(i) {
  	clb(i);
  	setTimeout(emit, Math.random()*1000, ++i);    
  }
  setTimeout(emit,  Math.random()*1000, 0);
}

function foo(clb) {
	return emitter(clb);
}

function bar(clb) {
	return emitter(clb);
}

// foo и bar принимают callback, 
// в который периодически возвращаются значения
// задача: с помощью log, выводить суммы пар по возрастанию 
// с гарантированной очередностью

//foo(log);
//bar(log);