Как поставить сервисный метод в интервальную функцию в Angular 6? - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь использовать функцию интервала для выполнения метода обслуживания каждые X секунд, но он не работает.

Метод обслуживания:

getCryptocurrencyInfoBasic(): Observable<Asset>[]{
  this.cryptoinfo = [];
  this.cryptoinfo.push(this.http.get<Asset>(this.btcurl));
  this.cryptoinfo.push(this.http.get<Asset>(this.ethurl));
  this.cryptoinfo.push(this.http.get<Asset>(this.ltcurl));
return this.cryptoinfo;

}

Сейчас я делаю это:

info = interval(1000).pipe(
switchMap((i) => this.cryptoService.getCryptocurrencyInfoBasic()[i]),    
map(res => {res; console.log(res);}));

И он печатает каждый элемент массива (консолью), но затем он показывает мне эту ошибку:

TypeError: Вы предоставили'undefined', где ожидался поток.Вы можете предоставить Observable, Promise, Array или Iterable.

Как я могу получить в инфо-переменную массив с 3 http Observables, чтобы отправить его в HTML?

Заранее спасибо!

1 Ответ

0 голосов
/ 26 августа 2018

Вы возвращаете массив из метода getCryptocurrencyInfoBasic.

Наблюдаемый оператор map ожидает наблюдаемый ввод.Аналогично, оператор switchMap принимает входные данные Observable и ожидает возвращаемого значения Observable (я удивлен, что ваш компилятор Typescript или Intellisense еще не кричат ​​на вас, хаха).

Вам нужно будет изменить getCryptocurrencyInfoBasic чтобы вернуть наблюдаемую.Самый ленивый подход - это return Observabke.of(this.cryptoinfo);, но есть много других возможностей для наблюдаемых здесь.

Например, вы можете изменить cryptoInfo на Subject и передавать через него новые значения с помощьюnext, или вы можете сгладить три http.get с в cryptoInfo с помощью flatMap или mergeMap.

...