Ожидайте завершения выполнения асинхронно скомпонованной функции, прежде чем принимать другой запрос - PullRequest
0 голосов
/ 16 октября 2019

У меня есть документ PDF в режиме рендеринга с ограничением, что Я могу открывать только одну страницу за раз . Я ударил несколько виджетов в ListView.builder, которые запрашивают компонент, который инкапсулирует открытый PDF-документ, для визуализации страницы, возвращая изображение этой PDF-страницы. Так у меня есть, например. 7 «параллельный» (в обычном смысле этого слова) рендеринг запрашивает этот код в документе. Что мне нужно, это заказать их, и для этого было бы удобно использовать для этого пользователя RX.

Вообще, я представляю реализацию, подобную этой:

Observable<RenderingRequest> _requests = ...;

Component() {
    _requests.someMagicOperatorThatSuspendTheFurtherEmissionUntilProcessingIsComplete(_processItem);
}

Future<void> _processItem(RenderingRequest request) {
    final Page page = await _document.openPage(request.index);
    final Image image = await _convertToImage(page);
    await page.close();
    // send processed image through a sink to a subscriber that awaits this particular image, for instance
}

Но как на самом деле задушить другие запросы'обработка, пока тот, который в настоящее время зарегистрирован, не завершится? Это вообще возможно?

...