Объединение двух потоков SSE на клиенте, асинхронно
Есть два SSE-стрима. Нужно собрать данные из обоих, отфильтровать, соединить, выкинуть лишнее, навести красоту и выдать пользователю по вебсокетам.
Примерный схематичный код:
var resultArray = [];
var source = new EventSource('https://example.com/stream1,stream2');
source.onmessage = function(e) {
// если 1-й массив уже пришёл
if (resultArray.hasOwnProperty(e.data.id]))
// тут много работы над пришедшим 2-м массивом
// объединяем массивы
resultArray[e.data.id] = resultArray[e.data.id].concat(e.data);
// отправка
ws.send(resultArray[e.data.id]);
// удаляем
delete resultArray[e.data.id]
// если 1-й массив ещё не приходил
} else {
// тут много работы над пришедшим 1-м массивом
resultArray[e.data.id] = e.data
}
Всё работает замечательно. За исключением того, что в итоговом массиве какая-то белиберда и мешанина. Подозреваю, что это из-за асинхронного доступа к массиву — функции не успевают отработать до поступления массива со второго стрима.
Как лучше сделать, господа? Может, есть вообще какие-то уже готовые решения для создания такого вот «SSE-прокси»? Мне только всякий ад приходит в голову — запись массивов по отдельности с ключами id-уник.ключ и id-уник.ключ и пытаться по истечению допустим 10 секунд их отыскать и с ними работать, если оба на месте.