Идея состоит в том, что вы не можете выйти из будущего, поэтому вам нужно обновить состояние внутри будущей вещи, а не пытаться получить эквивалент asyncio.gather
или чего-то подобного.
Я изменил:
setVerticalData(_ => {items-> Js.Array2.sortInPlaceWith((a, b) => {...})});
с
items
->List.fromArray;
->List.map(item =>
cache(item##hosted_video_url)
->FutureJs.fromPromise(Js.String.make)
)
->Future.all
->Future.map(cachedList => {
setVerticalData(_ => {items: cachedList})
})