【问题标题】:TypeError: Object doesn't support property or method 'map' - AngularJS2TypeError:对象不支持属性或方法'map' - AngularJS2
【发布时间】:2018-03-27 07:42:15
【问题描述】:

我有一个服务文件,它在某些条件下(显然是进行 http 调用)返回一个可订阅的结果,并在其他一些条件下返回一个普通对象。由于我在component.ts 中使用了.subscribe 来调用此服务方法,因此在没有发生http 调用的情况下得到“TypeError:对象不支持属性或方法'map'”。

component.ts文件代码

    this.myservice.userAuthenticate( 'user' ).subscribe(result => {

        console.log('results', result);
    });

而我的服务文件是这样的

    public userAuthenticate(user ): Observable<any> {

    const expired = this.expiry.hasExpired();
    if ( expired ) 

            return this.userService.generateUserId('some input' ).map( data => {
                this.CheckUser( User);
                return <any>userInfo;
            } );
        }
    } else {

        return this.CheckUser( User).map( response => {
            return <any>userInfo;
        } );
    }

在其他部分,我只是从存储中获取数据并使用CheckUser 方法处理它。没有发生 http 调用,它给了我上述错误。即使没有 http 调用,有什么方法可以返回可订阅的结果吗?

一种解决方法是从组件文件中进行此检查,并且只订阅第一部分,但我必须在很多地方进行与此特定方法在许多地方相同的更改。谁能告诉我如何在 else 条件下给出可订阅的响应?

【问题讨论】:

    标签: angular http rxjs angular2-services subscribe


    【解决方案1】:

    所以问题是 this.CheckUser(User) 没有返回 Observable。

    我不完全确定您的代码是做什么的,以及为什么您将 this.CheckUser(User)map 链接在一起,而在上面您不是,这有点令人困惑,但您仍然可以使用 Observable.of() 包装方法调用:

    return Observable.of(this.CheckUser(User)).map(response => {
      return <any>userInfo;
    });
    

    如果您希望仅在订阅此链后调用回调,最终您可以使用Observable.defer(() =&gt; this.CheckUser(User))

    【讨论】:

    • 我已经删除了地图并且 Observable.of('return value') 为我工作。我也使用了 import 'rxjs/add/observable/of';感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2015-04-14
    • 2020-09-03
    相关资源
    最近更新 更多