ИМХО, fromEmitter для более простых случаев. AsynOnSubscribe упрощает написание собственного источника, поддерживающего Backpressure и умеющего выдавать запрашиваемое количество элементов.
В принципе можно, поменяв как работает observeChanges. У нас ещё есть синхронное получение значения, поэтому сделали так по привычке (хотя сейчас посмотрел, что BehaviorSubject имеет метод getValue).
Согласен, fromEmitter выглядит проще и надёжнее.
Сам его до этого не использовал, потому что в тех редких местах где использовал Observable.create проблем с backpressure не было. А в других использовал Observable.SyncOnSubscribe и Observable.AsyncOnSubscribe.
В таком случае, я советую вам сначала посмотреть Андроид приложение, потому что карта там отличается от десктопной. И пины там ведут себя как я описал выше.
Вы пишете про разные вещи, цитата относится к запросу, который ещё не успел выполниться на момент, когда подвинули карту и начали запрашивать точки из новой области.
Далее, чтобы избежать моргания пинов на карте, берётся пересечение множества уже загруженных точек с теми, которые только что получили. Таким образом, пины, которые вышли из области видимости, удаляются, которые появились — добавляются на карту.
А идея с загрузкой дельты вводит дополнительную сложность, поскольку надо считать эту дельту, объединять её результаты с текущими, это что касается клиента. С точки зрения сервера, не факт, что поиск в дельте будет быстрее, чем во всей области + с кластеризацией сложнее.
ИМХО,
fromEmitter
для более простых случаев.AsynOnSubscribe
упрощает написание собственного источника, поддерживающего Backpressure и умеющего выдавать запрашиваемое количество элементов.Да, увидел о чём вы. Мне кажется это единичный случай, потому что я не могу это воспроизвести.
В принципе можно,
поменяв как работает observeChanges
. У нас ещё есть синхронное получение значения, поэтому сделали так по привычке (хотя сейчас посмотрел, чтоBehaviorSubject
имеет методgetValue
).Согласен,
fromEmitter
выглядит проще и надёжнее.Сам его до этого не использовал, потому что в тех редких местах где использовал
Observable.create
проблем с backpressure не было. А в других использовалObservable.SyncOnSubscribe
иObservable.AsyncOnSubscribe
.Далее, чтобы избежать моргания пинов на карте, берётся пересечение множества уже загруженных точек с теми, которые только что получили. Таким образом, пины, которые вышли из области видимости, удаляются, которые появились — добавляются на карту.
А идея с загрузкой дельты вводит дополнительную сложность, поскольку надо считать эту дельту, объединять её результаты с текущими, это что касается клиента. С точки зрения сервера, не факт, что поиск в дельте будет быстрее, чем во всей области + с кластеризацией сложнее.