我的代碼因異步問題而被阻止。我有 3 個 fct,1 被我的組件呼叫并回傳一個值:
getMenu(): Observable<Menu> {
this.recupUser();
return of(this.menu);
}
在這里,我呼叫我的函式 recupUser() 來執行 http get 請求,然后將資料放入 var 中:
recupUser() {
return this.loginService.recupConnectedUser().subscribe(
{
next: value =>{
this.User = value;
this.initMenu()
},
}
)
我的 var User 用于 initMenu() 然后我必須在我的訂閱中呼叫這個 fct 才能在 User 中獲得價值。然后在 initMenu() 我做一個條件:
initMenu() {
if (this.User.es = '04840') {
this.menu = {
leftMenu: [
{title: 'Title 1', id: '1', role: '/URL1'},
{title: 'Title 2', id: '2', role: '/URL2'},
],
rightMenu: [
{icon:'profile',tooltip:'Profile', id:'profile', role:'/'},
]
};
} else {
this.menu = {
leftMenu: [
{title: 'Title1', id: '1', role: '/URL1'},
],
rightMenu: [
{icon:'profile',tooltip:'Profile', id:'profile', role:'/'},
]
};
} }
然后我在最后一個 fct 中初始化我的選單。我已經嘗試過可能的事情,但我沒有等到一切都完成以回傳我的價值。我對異步原理有一些困難,所以歡迎任何幫助!
uj5u.com熱心網友回復:
使用rxjs 運算子
interface Menus {
leftMenu: {title: string, id: string, role: string}[];
rightMenu: {icon:string,tooltip: string, id: string, role: string}[];
}
在班上
initMenu(es: string): Menus {
return es === '04840' ?
{
leftMenu: [
{title: 'Title 1', id: '1', role: '/URL1'},
{title: 'Title 2', id: '2', role: '/URL2'},
],
rightMenu: [
{icon:'profile',tooltip:'Profile', id:'profile', role:'/'},
]
} :
{
leftMenu: [
{title: 'Title1', id: '1', role: '/URL1'},
],
rightMenu: [
{icon:'profile',tooltip:'Profile', id:'profile', role:'/'},
]
};
}
getMenu(): Observable<Menus> {
this.loginService.recupConnectedUser().pipe(
map(value => {
this.User = value;
this.menu = this.initMenu(value.es);
return this.menu;
})
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/498338.html
