我是Angular4中Observer的新手,因为我曾在AngularJs
处理过Promises。我想了解两种情况:
从函数返回observable,以便相应地更改UI。
从UI上反映的函数返回连续的数据流。
在服务(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);
}
我收到以下错误:
财产'订阅'类型'()=>上不存在空隙'
答案 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';