【问题标题】:Type 'Subscription' is not assignable to type 'Observable' error while return from subscribe从订阅返回时,类型“订阅”不可分配给类型“可观察”错误
【发布时间】:2017-09-06 05:50:08
【问题描述】:
    setPrivileges(privilege: string): Observable<boolean> {
        if (this.loginService.privilegeList != null && this.loginService.privilegeList != undefined && this.loginService.privilegeList.getValue() != null) {
            this.privileges = this.loginService.privilegeList.getValue().filter(item => item.name === privilege);
            console.log("if this.privileges : "+this.privileges);
                return Observable.of(true);
        } else {
              return this.getUserRolesAndMenus().subscribe((result: any) => {  // line 7
               console.log("result  :"+JSON.stringify(result));
               this.privileges = result.roles.filter((element: any) => {
                    element.privileges.filter((item: any) => {
                        item.name === privilege;
                    })
                })
                console.log("esle this.privileges : "+this.privileges);
                if(this.privileges == null)
                    return Observable.of(true);
                else
                       return Observable.of(true);
            });
        }
    }

在第 7 行它抛出异常

[ts]

类型“订阅”不可分配给类型“可观察”。 “订阅”类型中缺少属性“_isScalar”。 (方法) UserService.getUserRolesAndMenus(): Observable 获取用户详细信息。 '

这里有什么问题?

/**
     * To get the user details.
     */
    getUserRolesAndMenus(): Observable<any> {
        let headers = new Headers();
        headers.append(AppUtils.HEADER_AUTHENTICATION, localStorage.getItem(AppUtils.STORAGE_ACCOUNT_TOKEN));
        return this.http.get(AppUtils.GET_USER_ROLES_AND_MENUS + AppUtils.SYSTEM_ID_IRS, { headers: headers })
            .map(response => response.json())
            .catch(this.handleError)
           /* .publishReplay(1)
            .refCount();*/
    }

【问题讨论】:

  • 这是:return this.getUserRolesAndMenus().subscribesubscribe 方法不返回Observable;它返回一个Subscription
  • this.getUserRolesAndMenus(),它返回一个 observable。更新了问题添加了 getUserRolesAndMenus() 代码。
  • @cartant :我该如何解决这个问题,需要返回可观察的布尔值。

标签: typescript rxjs


【解决方案1】:

您返回的是订阅而不是 Observable。将subscribe 更改为switchMap。这将返回一个 Observable 并将 getUserRolesAndMenus 的结果替换为您使用 Observable.of(...) 创建的 Observable

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 2019-08-01
    • 1970-01-01
    • 2018-02-26
    • 2016-11-12
    • 1970-01-01
    • 2017-05-06
    • 2019-11-12
    • 2019-03-27
    相关资源
    最近更新 更多