1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/silentbalanceyh-vertx-zero

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
d10057-utility-x-advanced-futures.md 3.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 04:28 85b9559

Утилита X, thenParallel

В этой главе мы сосредоточимся на расширенном использовании в будущем. Здесь мы перечислим некоторые реальные проблемы проекта и рассмотрим, как решить эту проблему с помощью инструмента Utility X в нулевой системе.

1. Параллельные фьючерсы

Мы часто сталкиваемся с такими ситуациями:

  1. В нашем проекте есть несколько видео, вы хотите найти все видео, загруженные вами или другими пользователями;
  2. Когда вы получаете список видео, вы хотите узнать дополнительный статус каждого видео.
  3. Затем в списке видео нам нужно поле с именем «подписан», чтобы записать, подписаны ли вы на это видео.

В этой ситуации у нас есть две таблицы: Video & Subscription, и мы хотим получить список видео, но каждая запись должна выполнять вторичный запрос, чтобы проверить, было ли подписано это видео. Вот фьючерс для такой ситуации:

Этот пример приведён потому, что в проекте мы использовали Mongo вместо SQL, нет оператора соединения, и нам нужно упомянуть, что API — не лучшее решение, а только представить использование API, чтобы рассказать вам, как построить фьючерс в нулевом состоянии.

static <F, S, T> Future<List<T>> thenParallel(
    final Future<List<F>> source, 
    final Function<F, Future<S>> generateFun, 
    final BiFunction<F, S, T> mergeFun
)

Рабочий процесс для этого API следующий:

  1. Запрос к базе данных и возврат Future<List<F>>, в нашей ситуации F означает Video.
  2. Предоставьте функцию для генерации другого Future<S>, функция принимает аргумент из шага 1, затем эта функция будет воздействовать на каждый элемент List<F>.
  3. Когда вторичные фьючерсы выполнены, это означает, что каждый F сгенерирует Future<S> и получит S, последний mergeFun позволит вам обработать F, S в T и вернуть Future<List<T>>.

2. Объяснение рабочего процесса

Рабочий процесс этого API выглядит следующим образом:

3. Резюме

Этот API немного сложен, поскольку он обеспечивает параллельную работу со списком и генерирует новый список. В вышеприведённом рабочем процессе F — это видео, мы могли бы использовать видео для создания каждой записи о подписке, принадлежащей вам, тогда каждый элемент будет выполнен для построения результата T. Последний результат List<T> содержит список видео с дополнительным полем «подписан», которое сообщает вам, подписаны ли вы на видео.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/silentbalanceyh-vertx-zero.git
git@api.gitlife.ru:oschina-mirror/silentbalanceyh-vertx-zero.git
oschina-mirror
silentbalanceyh-vertx-zero
silentbalanceyh-vertx-zero
master