Как вернуть значение как наблюдаемое в angular 6

#angular #rxjs #observable

#angular #rxjs #наблюдаемое

Вопрос:

Я хочу вернуть значение (любые данные) из сервиса в компонент в качестве наблюдаемого. После пары поисков в наблюдаемых найдено следующее решение:

 class AppService {
    getData(value) {
        // do we have any other best way to return value as an observable
        return Observer.create((observer) => {
            observer.next(value);
        });
    }
}

class AppComponent implements OnInit {
    ngOnInit() {
        this.dataService$ = this.appService.getData().subscribe((data) => {
            // do some task with data
        });
    }
}
  

Комментарии:

1. return of(value)

2. Вы уже нашли ответ, в чем здесь вопрос?

Ответ №1:

Просто верните, как показано ниже

 import { Observable, of } from 'rxjs';

...

getData(value) : Observable<any> {
   // Simple way of sending value using of operator.
   return Observable.of(value);
}
  

Надеюсь, это поможет!

Комментарии:

1. спасибо, это сработало, вы знаете, нужно ли мне делать так или иначе, возвращая наблюдаемое в качестве значения;

2. да, вам нужно вернуть наблюдаемое как значение, чтобы вы могли подписаться на obsevable для получения данных в компоненте

Ответ №2:

Используйте of вот так:

 import { of } from 'rxjs';
...
return of(value);
  

что эквивалентно:

 return new Observable(obs => obs.next(value));
  

Однако, если вы хотите преобразовать заданное значение (например, обещание, объект, подобный наблюдаемому, массив, итерируемый или массивоподобный объект), вы можете использовать from :

 import { from } from 'rxjs';
...
return from(value);
  

Ответ №3:

Вот что я делаю

В вашем сервисном файле :

Сначала я объявляю свое наблюдаемое таким образом

   myObs: BehaviorSubject<any> = new BehaviorSubject([]);
  

В этом методе вы можете установить свои данные в свой obs :

 var myArray = [1,2,3,4,5];
this.myObs.next(myArray);
  

Если вы хотите, чтобы ваш «контроллер» подписался на этот obs в вашем сервисе, просто предоставьте средство получения :

 public getMyObs(){
return this.myObs.asObservable()
}
  

И в вашем «контроллере» вы можете назвать это таким образом :

  ngOnInit() {

this.myService.getMyObs().subscribe(datas => {
    Do What you want with your datas
  }
}