У меня есть служба, которая извлекает данные с сервера. Эти данные используются для заполнения страницы. Я хотел бы обновить страницу каждые 5 секунд. Я пробовал с очень простым setInterval()
, но затем все вызовы на сервер один за другим, не дожидаясь завершения предыдущего. Это проблема, когда, например, сервер идет вниз. Теперь я не знаю, какое из них лучшее решение, может быть, с rxjs и наблюдаемыми.Angular2 - Повторите вызов службы
0
A
ответ
0
Вы могли бы сделать что-то простое, как это:
Rx.Observable.interval(5000)
.flatMap(() => this.http.whateverYouCall)
.map(resp => resp.json())
.subscribe((val) => //do something here with the result)
Это сделает новый вызов каждые 5 сек. Если вы действительно хотите создать новый звонок через 5 секунд после предыдущего, сообщите мне, и я обновлю это.
Если вы хотите, следующий звонок, чтобы начать, когда предыдущий закончился вы могли бы сделать это:
let subject$ = new Rx.BehaviorSubject("a");
subject$
.concatMap(() => fakeHttp().concat(Rx.Observable.empty().delay(5000)))
.do(() => subject$.next("a"))
.subscribe((val) => console.log(val));
jsbin: http://jsbin.com/fufuqid/13/edit?js,console Вы увидите, что каждые 7 секунд «Ъ» регистрируется. 2 секунды для издевающегося вызова и 5 секунд до обновления.
да пожалуйста .. я хотел бы, чтобы следующий звонок начался только тогда, когда предыдущий закончен – ayasha