地图运算符。不同的函数类型和访问器
Posted
技术标签:
【中文标题】地图运算符。不同的函数类型和访问器【英文标题】:Map operator. Different function types and accessor 【发布时间】:2018-11-02 05:35:59 【问题描述】:我最近在我的 Ionic 项目中更新了 Firebase 和 AngularFire2
版本:
Firebase:5.0.3 AngularFire2:5.0.0-rc.10 rxjs 6.2.0现在我尝试使用迁移指南将项目从常规地图升级到管道: Migration guide AngularFire2 version5
但如果我对以下代码块使用完全相同的示例:
///my code
let dataBaseCollection = this.store.collection('items').snapshotChanges().pipe(
map(actions =>
actions.map(a => ( key: a.key, ...a.payload.val() ))
)
).subscribe(items =>
return items.map(item => item.key);
);
///example
afDb.list('items').snapshotChanges().pipe(
map(actions =>
actions.map(a => ( key: a.key, ...a.payload.val() ))
)
)
我得到以下异常:
“OperatorFunction”类型的参数不可分配给“UnaryFunction, Observable”类型的参数>'。
参数'source'和'source'的类型不兼容。
类型“Observable”不可分配给类型“Observable”。存在同名的两种不同类型,但它们不相关。
属性“源”在“Observable”类型中受保护,但在“Observable”类型中是公共的。
我已经尝试过来自 rxjs 的两个不同的操作符
从 'rxjs/operators' 导入 map ; 从'rxjs/operators/map'导入地图;
感谢您的帮助。
【问题讨论】:
您的代码似乎与示例不同。在示例中,pipe()
后面是 .subscribe()
,返回所在的位置。
很好,你提到了它。我也试过这个只是为了确定。但我仍然得到同样的错误。我将快速编辑我的代码,使其更像示例。
【参考方案1】:
我让它运行起来。
我不知道真正的问题是什么。但是我完全删除了我的本地存储库并获得了所有新文件。
然后我重新安装了所有 NPM 文件。在这个领域的某个地方是我的问题。我猜,我的任何 npm 包都是问题所在。
对不起,我无法进一步澄清这个问题。以后可能会有人遇到同样的问题,可以在这里补充一下。
【讨论】:
【参考方案2】:好吧,我不知道这是否是问题所在,但有几点意见:
let dataBaseCollection
正在接收来自 Subscription
的 Subscription
而不是项目。你不能在subscribe
里面返回,所以你的代码应该是这样的:
let dataBaseCollection = this.store.collection('items').snapshotChanges().pipe(
map(actions => actions.map(a => ( key: a.key, ...a.payload.val() )))
)
如果您只想映射键,那么就这样做:
let dataBaseCollection = this.store.collection('items').snapshotChanges().pipe(
map(actions => actions.map(a => a.key))
)
【讨论】:
您好,感谢您的帮助。这是我在编辑示例之前的第一种方法,以便更等同于 Documents 给出的示例。但这并不能解决地图操作员本身的问题。基本上,只要我让呼叫运行,databaseCollection 中的内容并不重要。以上是关于地图运算符。不同的函数类型和访问器的主要内容,如果未能解决你的问题,请参考以下文章