我是Angular 4中Observer的新手,因为我曾在qazxsw poi工作过Promises。我想了解2个场景:
在服务(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'。
看起来像代码也有问题,如果你想在特定的时间间隔推送值,那么你必须在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();