Я хочу объединить множество фьючерсов в один запрос, который срабатывает либо при достижении максимального размера пакета, либо при достижении максимального времени с момента получения самого раннего будущего.
Мотивация
Во флаттере у меня есть много элементов пользовательского интерфейса, которые должны отображать результат в будущем, в зависимости от данных в элементе пользовательского интерфейса.
Например, у меня есть виджет для места и вспомогательный виджет, который показывает, сколько времени потребуется, чтобы дойти до места. Чтобы вычислить, сколько времени займет прогулка, я отправляю запрос в Google Maps API, чтобы получить время в пути до места.
Более эффективно и экономично объединить все эти запросы API в пакетный запрос API. Таким образом, если виджетами мгновенно отправляются 100 запросов, то фьючерсы могут быть проксированы через одного провайдера, который объединяет фьючерсы в один запрос к Google и распаковывает результат от Google во все отдельные запросы.
Провайдеру необходимо знать, когда прекратить ждать новых фьючерсов и когда фактически выдать запрос, который должен контролироваться максимальным размером "пакета" (то есть количеством запросов времени в пути) или максимальным количеством времени, которое вы желаете. дождаться дозирования.
Желаемый API будет примерно таким:
// Client gives this to tell provider how to compute batch result.
abstract class BatchComputer<K,V> {
Future<List<V>> compute(List<K> batchedInputs);
}
// Batching library returns an object with this interface
// so that client can submit inputs to completed by the Batch provider.
abstract class BatchingFutureProvider<K,V> {
Future<V> submit(K inputValue);
}
// How do you implement this in dart???
BatchingFutureProvider<K,V> create<K,V>(
BatchComputer<K,V> computer,
int maxBatchSize,
Duration maxWaitDuration,
);
Предоставляет ли Dart (или пакет pub) уже эту функцию пакетной обработки, и если нет, как бы вы реализовали указанную выше функцию create
?
then()
иtimeout()
методы - person pskink   schedule 01.10.2019create
выше? - person Jack Reilly   schedule 01.10.2019Future
, но объединение их вместе таким образом, чтобы можно было объединить в эргономичный API, - это то, что я ищу - person Jack Reilly   schedule 01.10.2019