2017-09-06 75 views
1
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();*/ 
    } 
+1

這樣:'this this.getUserRolesAndMenus()。subscribe'。 ['subscribe'](https://github.com/ReactiveX/rxjs/blob/5.4.3/src/Observable.ts#L74-L76)方法不會返回'Observable';它會返回['Subscription'](http://reactivex.io/rxjs/class/es6/Subscription.js~Subscription.html)。 – cartant

+1

this.getUserRolesAndMenus(),它返回一個observable。更新了添加getUserRolesAndMenus()代碼的問題。 – user630209

+1

@cartant:我該如何解決這個問題,需要返回observable布爾值。 – user630209

回答

2

您正在返回訂閱而不是Observable。將subscribe更改爲switchMap。這將返回一個Observable並用你創建的Observable替換getUserRolesAndMenus的結果Observable.of(...)