2016-10-20 3 views
0

У меня есть служба, которая извлекает данные с сервера. Эти данные используются для заполнения страницы. Я хотел бы обновить страницу каждые 5 секунд. Я пробовал с очень простым setInterval(), но затем все вызовы на сервер один за другим, не дожидаясь завершения предыдущего. Это проблема, когда, например, сервер идет вниз. Теперь я не знаю, какое из них лучшее решение, может быть, с rxjs и наблюдаемыми.Angular2 - Повторите вызов службы

ответ

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 секунд до обновления.

+0

да пожалуйста .. я хотел бы, чтобы следующий звонок начался только тогда, когда предыдущий закончен – ayasha

Смежные вопросы