Если у меня есть наблюдаемое, выполнение которого занимает много времени. Мы назовем его longObservable
, который имеет тип Observable, выполнение занимает 5 секунд, и каждый раз, когда он выполняется, он генерирует новую строку только один раз, а затем завершается.
longObservable(): Subject<string> {
return timer(5000).pipe{
map(() => randomString())
}
}
И некоторые другие страницы называют это несколько раз. Если это происходит, я бы хотел продолжить этот процесс. Если он завершен, я бы хотел начать его снова.
longObservable.subscribe() // Immediate, start the timer
и это запускается через две секунды:
longObservable.subscribe() // Get the same string as
// the above subscription in 3 seconds.
и это происходит через 20 секунд
longObservable.subscribe() // Start a new iteration and wait
// 5 seconds, get a new string.
Вторая подписка, я думаю, проста, она будет работать так, как я хочу. Это третий, с которым у меня проблемы. Он выдаст то же значение, что и два других, сразу после завершения longObservable
.
Используется для определения местоположения на устройстве. Я хочу запросить новое местоположение, но если запрос уже выполняется, просто используйте этот результат.
Редактировать: Изменено наблюдаемое на предмет для многоадресной рассылки, удален дубль (1).
Edit2: https://stackblitz.com/edit/angular-venpk4 вот рабочий пример того, что я хочу. Я надеюсь сделать это без переменной timerRunning и с операторами RxJS. Он находится под компонентом hello и печатается на консоли.