Правильный способ использовать FlatMap в Rx? - PullRequest
0 голосов
/ 04 сентября 2018

Это правильный способ использования flatMap?

const observer = Observable
    .interval(3000)
    .takeUntil(Observable.timer(10000))
    .flatMap(this.askToReadyRecordVideo);

private askToReadyRecordVideo(): Observable<any> {
    return this.requestMethods.askToReadyRecordVideo({});
}

В этой строке я привязывал к отправке запроса на сервер каждые 3 секунды до 10 секунд, затем вызывал метод this.askToReadyRecordVideo(), который возвращает данные с сервера.

Я заканчиваю это, когда получаю успешный ответ. Это правда?

1 Ответ

0 голосов
/ 04 сентября 2018

Я не уверен, правильно ли я вас понимаю, но ваш код выполняет следующие действия: Метод askToReadyRecordVideo будет вызываться каждые 3 секунды, пока не истечет 10 секунд (будет три вызова, по 3 с, 6 с и 9 с). Ваша наблюдаемая observer выдаст результаты этих вызовов сервера.

Если вы хотите отменить процесс после первого успешного ответа, добавьте следующее:

.filter(resp => /* return true when resp indicates success */)
.take(1)

Если каждый ответ является успешным (то есть ошибки обозначаются событием ошибки, проталкиваемым через наблюдаемое), просто пропустите строку filter.

Кстати: будьте осторожны при передаче обратных вызовов, чтобы избежать неожиданностей о том, что this означает в askToReadyRecordVideos. Вы можете использовать flatMap(() => this.askToReadyRecordVideo()) или flatMap(this.askToReadyRecordVideo.bind(this)) вместо flatMap(this.askToReadyRecordVideo).

...