【问题标题】:AngularFire .subscribe => console.log returning undefined after use of map or flatMapAngularFire .subscribe => console.log 在使用 map 或 flatMap 后返回 undefined
【发布时间】:2016-11-05 19:20:48
【问题描述】:

我对 AngularFire、Firebase、rxjs 等还是很陌生。

谁能告诉我为什么以下内容会从 console.log 中返回“未定义”?

    this.af.database.object('/teams/' + this.id)
        .map((data) => {
            data.teamName = Teams[data.team];
        })
        .subscribe((data) => {
            console.log(data)
        })

Teams 是一个枚举。红色 = 1,蓝色 = 2...

我知道问题出在 .map 中,好像我将其删除并仅记录 x 或记录枚举查找都可以正常工作..

这很好用(并且可以解决红色问题):

    this.af.database.object('/teams/' + this.id)
        .subscribe((x) => {
            console.log(Teams[x.team]);
        })

这样做(解决可观察到的 firebase):

    this.af.database.object('/teams/' + this.id)
        .subscribe((x) => {
            console.log(x);
        })

我也尝试过在列表上使用 flatMap,而不是在对象上使用地图。

任何帮助将不胜感激。

【问题讨论】:

    标签: angular rxjs angularfire observable


    【解决方案1】:

    因为来自 getmap 方法的返回都是可观察的,而不是 json。

     .map((data) => {
                data.teamName = Teams[data.team];
            })
    

    您将 data 变量视为 json,但事实并非如此。所以你的变量变得未定义。因为没有data.Teamname这样的东西

    参考:https://angular.io/docs/ts/latest/guide/server-communication.html#!#fetch-data

    http.get 方法从 RxJS 库返回一个 HTTP 响应的 Observable (Observable),map 是 RxJS 操作符之一。

    【讨论】:

    • 谢谢echonax。这就说得通了。我见过人们使用 toJSON?有什么方法可以在不失去使用异步管道的能力的情况下添加到这样的数据中?我可能在这里问错了问题,我的问题是数据从数据库中返回,团队值为“1”,这是正确的,但不是我想要在屏幕上显示的内容。我想对 Teams 枚举进行反向查找并显示它的字符串。我可能处理这一切都错了。
    • @ChrissySemens 您可以.map((res:Response) => res.json()) 并处理您订阅中的数据。
    • 感激不尽。谢谢:D
    • @ChrissySemens 嗯很高兴我能帮上忙
    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2019-08-04
    • 2021-03-22
    • 1970-01-01
    • 2020-04-12
    • 2019-03-19
    相关资源
    最近更新 更多