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

时间:2017-12-21 08:01:26

标签: angular rxjs

我是Angular4中Observer的新手,因为我曾在AngularJs处理过Promises。我想了解两种情况:

  1. 从函数返回observable,以便相应地更改UI。

  2. 从UI上反映的函数返回连续的数据流。

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

    counter(){
       public counterObserver = Observable.create(obs => {
        obs.next(increment())
       });
      return counterObserver;
     }
    
    increment(){
      setInterval(function(){
      count++
     },1000)
    }
    

    在proc.component.ts文件中:

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

    我收到以下错误:

      

    财产'订阅'类型'()=>上不存在空隙'

1 个答案:

答案 0 :(得分:1)

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

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));

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

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

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

你必须在这里提供回复类型

counter(): Observable<datatype>{

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

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

然后aply订阅

 getData("val").subscribe();

还导入

import { Observable } from 'rxjs/Observable';