TypeError:Object不支持属性或方法'map' - AngularJS2

时间:2018-03-27 07:42:16

标签: angular http rxjs angular2-services subscribe

我有服务文件,它在某些条件下返回可订阅的结果(显然是进行http调用)并在某些其他条件下返回普通对象。由于我在.subscribe中使用component.ts来调用此服务方法,因此在没有发生http调用的情况下,获取“TypeError:Object不支持属性或方法'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;
        } );
    }

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

一个解决方法是从组件文件中进行此检查并仅订阅第一部分,但是我必须在许多地方对许多地方进行相同的更改。谁能告诉我怎样才能在其他情况下给出可订阅的回复?

1 个答案:

答案 0 :(得分:1)

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

我不完全确定你的代码是做什么的,以及为什么你this.CheckUser(User)map进行链接,而你上面不是那种令人困惑但仍然可以用方法调用Observable.of()

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

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