Как обработать результат списка будущего с ReasonML? - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь просмотреть список элементов, кэшировать URL-адрес и затем обновить URL-адрес в списке перед его рисованием.

Однако, похоже, я не могу этого сделать.

Есть идеи?

external cache: option(string) => Js.Promise.t({. "uri": string, "filePath": string }) = "get";

let items = result##data##data->Option.getWithDefault([||]);
let cachedUri = items
   ->Belt.Array.map(
         item =>
           cache(item##hosted_video_url)
           ->FutureJs.fromPromise(Js.String.make)
           ->Future.flatMapOk(cachedObj => (
             {. "hosted_video_url": cachedObj##uri }
           )
   ))
   ->Belt.Array.toList
   ->Future.all;

1 Ответ

1 голос
/ 30 сентября 2019

Идея состоит в том, что вы не можете выйти из будущего, поэтому вам нужно обновить состояние внутри будущей вещи, а не пытаться получить эквивалент 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})
   })

...