2017-03-07 77 views
1

我目前正在通过console.logs来调试我的ng2应用程序。如果你登录一个数组,它会返回一个AnonymousSubject具有以下属性:如何阅读Angular 2中的AnonymousSubject

AnonymousSubject 
_isScalar:false 
closed:false 
destination:AnonymousSubject 
hasError:false 
isStopped:false 
observers:Array[0] 
operator:ToArrayOperator 
source:AnonymousSubject 
thrownError:null 
__proto__:Subject 

是否有可能看到数组的内容?为什么点击'目标'递归循环n次?

代码:

GetFeed(id: UUID): Feed[] {  
    var toReturnFeed: any[]; 

    this.table.find({id: id}).fetch().subscribe(result => toReturnFeed); 
    console.log(toReturnFeed); 

    return toReturnFeed; 
} 

我有更多的问题,但我会拯救那些现在。提前致谢。

+0

不是试图用作为观察到的和订阅? –

+0

你为什么要读那个?如果您需要查看它处理的数据,则必须对其进行“订阅”,并在'subscribe'内调用'console.log',或者使用'do'运算符在每次发出新值时记录日志。 – Supamiu

回答

2

您没有记录实际的数组,而是一个Observable,它可能会返回一个数组。

并且由于您构造此Observable的结构,其目的地与原点相同,因此将具有循环引用。

要获得阵列记录:

this.someObservable.subscribe((someArray: any[]) => { 
    console.log(someArray); 
}); 

现在你已经张贴您的代码似乎遗忘的aync方法非常重要的概念。您不能像这样返回toReturnFeed,因为它总是会导致undefined。您应该返回Observable<Feed[]>

GetFeed(id: UUID): Observable<Feed[]> { 
    return this.table.find({id: id}).fetch() 
} 

然后你可以从别的地方调用此方法和得到的结果是这样的:

serviceInstance.GetFeed(1).subscribe((returnFeed: Feed[]) => { 
    console.log(returnFeed); 
}); 
+0

记录它的另一种方法是添加一个'do'运算符,这样当可观察对象被赋值时它将被记录。感谢你解释为什么它是循环的,不知道。 – Supamiu

+0

@Supamiu所以,'do'并不像'subscribe'那样真的启动'Observable',而是添加了一个额外的方法(比如'map'),而不会改变数据? – PierreDuc

+1

这就是它,yes,'do'允许您在可观察链中放置只读方法,而不会像订阅那样触发它。如果你想调试一个http请求,它可能会有用。 – Supamiu