与过滤器一起使用的rxjs switchmap生成的未定义错误(Angular 2+ngrx/store+redux)

与过滤器一起使用的rxjs switchmap生成的未定义错误(Angular 2+ngrx/store+redux),angular,redux,rxjs,ngrx,Angular,Redux,Rxjs,Ngrx,我正在使用ngrx/store+redux模式的Angular 2.3应用程序中工作 在从我的存储中提取对象列表(即页面顶部的大图像)时,我遇到了一个未定义的错误,我正在尝试对其进行故障排除。看起来这可能是一个竞争条件,函数在可观测之前解析。在任何情况下,我仍然得到结果,但试图理解错误: error_handler.js:50 EXCEPTION: Cannot read property 'filter' of undefined TypeError: Cannot read property

我正在使用ngrx/store+redux模式的Angular 2.3应用程序中工作

在从我的存储中提取对象列表(即页面顶部的大图像)时,我遇到了一个未定义的错误,我正在尝试对其进行故障排除。看起来这可能是一个竞争条件,函数在可观测之前解析。在任何情况下,我仍然得到结果,但试图理解错误:

error_handler.js:50 EXCEPTION: Cannot read property 'filter' of undefined
TypeError: Cannot read property 'filter' of undefined
我在构造函数中有私有的_-store:store

我的职能是:

selectObject(id: number): Observable<Object> {
    return this.objects$
      .switchMap( objects => objects.filter( object => object.id === id));
}

最可能的解释是,状态不包含对象属性,或者该属性在初始状态中未定义,并且选择运算符随后发出未定义的:

在你的问题中没有提到国家的结构,所以没有更多的话要说

要确认这是问题所在,可以向选择器添加一些日志记录:

_store.select(s => { console.log(`objects = ${s.objects}`); return s.objects; })

谢谢你的建议。问题毫不奇怪地来自于我如何调用上游函数,我有一个条件在它被填充之前调用它,但在它被填充之后再次调用它,因此它工作了,但抛出了一个错误。

这可能是一个TypeScript错误。如果objects是数组,请尝试objects$:Observable=\u store.selects=>s.objects我已经添加了关于问题中提到的错误的答案,但是为什么要使用switchMap操作符呢?switchMap合并了一个可观察对象,但您似乎返回了一个数组。@cartant使用switchMap是因为我从存储中返回了一个包含数组的可观察对象。所有新数据都通过一个减速机进入存储,减速机发送一个有效负载。在这种情况下,对象数组生成新状态,从存储中我得到最新状态的可观察状态。根据声明-objects$:observable-它发出一个对象数组,而不是可观察状态。不管怎么说,我已经投票决定关闭这个网站,因为你已经发布了一个答案,说明问题是上游的,所以我认为这是一个问题,在这种情况下是不可复制的。
_store.select(s => s.objects)
_store.select(s => { console.log(`objects = ${s.objects}`); return s.objects; })