无法使用订阅功能从服务中读取数据

时间:2017-07-27 16:53:42

标签: angular subscribe

setData的父级:

ngOnInit(){
    this.updateData(this.temp)
}
updateData(value: Employee) {
   this.parentData.setData(value)
}

来自getData的孩子:

constructor(private route:ActivatedRoute, private parentData:GetParentData){
    setTimeout(
        console.log("Heavy:" , this.parentData.tempdata.subscribe(data=>console.log("Jessi:",data))),
        this.parentData.getData().subscribe(data=>alert("hi"))
        ,3000)
}

服务:

export class GetParentData{
private dataObs$ = new Subject<Employee>();
tempdata = this.dataObs$.asObservable();
getData():Observable<Employee>{
    return this.tempdata;
}
setData(data: Employee) {
    this.dataObs$.next(data);
}

控制台响应是:

  

重型:
  订阅者{已关闭:false,syncErrorValue:null,syncErrorThrown:false,syncErrorThrowable:false,isStopped:false ...}已关闭:falsedestination:SafeSubscriberisStopped:falsesyncErrorThrowable:falsesyncErrorThrown:falsesyncErrorValue:null_subscriptions:Array(1) proto :订阅

1 个答案:

答案 0 :(得分:1)

由于.subscribe()会返回订阅,console.log会打印您要求打印的内容:订阅本身。有几种方法可以获取数据并将其打印到控制台。

如果您想要打印,我会从第一个console.log中获取订阅,并将代码移动到单独的函数,因为setTimeout只需要一个函数。

constructor(private route:ActivatedRoute, private parentData:GetParentData){
    setTimeout(this.printData(), 3000);
}

printData(): void{
    this.parentData.tempdata.subscribe(data=>console.log("Heavy:" ,"Jessi:",data)));
    this.parentData.getData().subscribe(data=>alert("hi"));
}

我认为您的提醒功能是用于测试的,它不需要留在printData()