代码之家  ›  专栏  ›  技术社区  ›  Jayesh Ambali

TypeError:对象不支持属性或方法“map”-AngularJS2

  •  1
  • Jayesh Ambali  · 技术社区  · 6 年前

    我有一个服务文件,它在某些条件下返回一个可订阅的结果(显然是进行http调用),在其他条件下返回一个普通对象。自从我使用 .subscribe 在里面 component.ts 若要调用此服务方法,请在不发生http调用的情况下获取“TypeError:对象不支持属性或方法‘map’”。

    组成部分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部分,Im只是从存储器中获取数据并使用 CheckUser 方法没有发生http调用,这给了我上述错误。即使没有http调用,是否有任何方法可以返回可订阅的结果?

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   martin    6 年前

    所以问题是 this.CheckUser(User) 没有返回可观察的。

    我不完全确定你的代码是做什么的,为什么 这CheckUser(用户) 链接 map 虽然上面没有,但仍然可以用 Observable.of() :

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

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