地图运算符。不同的函数类型和访问器

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 正在接收来自 SubscriptionSubscription 而不是项目。你不能在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 中的内容并不重要。

以上是关于地图运算符。不同的函数类型和访问器的主要内容,如果未能解决你的问题,请参考以下文章

Python 多态 对象常用内置函数 运算符重载 对象迭代器 上下文管理

C#高级编程

什么是C++重载?

Typescript构造函数和继承

常见的构造函数类型

5. 列表和数据框