通过服务从自定义函数返回Observer:Angular 4

问题描述 投票:0回答:1

我是Angular 4中Observer的新手,因为我曾在qazxsw poi工作过Promises。我想了解2个场景:

  1. 从函数返回observable,以便可以相应地更改UI。
  2. 返回来自UI上反映的函数的连续数据流。

在服务(proc.svc.ts)文件中,我创建了一个函数:

AngularJs

在proc.component.ts文件中:

counter(){
   public counterObserver = Observable.create(obs => {
    obs.next(increment())
   });
  return counterObserver;
 }

increment(){
  setInterval(function(){
  count++
 },1000)
}

我收到以下错误:

类型'()=> void'上不存在属性'subscribe'。

angular rxjs
1个回答
1
投票

看起来像代码也有问题,如果你想在特定的时间间隔推送值,那么你必须在ovserver上推送vlaue,就像下面给出的setInterval()函数的推送值一样,这也是代码问题

ngOnInit() {
   this.initCounter();
 }

initCounter(){
  this.procSvc.counter.subscribe(count => this.count = count);
}

还有一件事,例如它直接订阅观察者没有函数,没有()存在,但在你的情况下,它的功能正如我在下面指出的那样


尝试这样,因为计数器是功能,你的代码似乎是问题

const evenNumbers = Rx.Observable.create(function(observer) {
  let value = 0;
  const interval = setInterval(() => {
    if (value % 2 === 0) {
      observer.next(value);
    }
    value++;
  }, 1000);

  return () => clearInterval(interval);
});
//output: 0...2...4...6...8
const subscribe = evenNumbers.subscribe(val => console.log(val));

你必须在这里提供退货类型

initCounter(){
  this.procSvc.counter().subscribe(count => this.count = count);
}

现在它似乎是空的,意味着无效。或者我在数据类型未知时执行以下操作

counter(): Observable<datatype>{

然后aply订阅

 public getData(path: string):Observable<any>{
    return this.http.get(path, options)
        .map((response: Response) => response.json())  ;
  }

还进口

 getData("val").subscribe();
© www.soinside.com 2019 - 2024. All rights reserved.