Javascript Angular 6:async等待某个变量得到它的变量
在我的Angular 6应用程序下,我有一个变量“permittedPefs”,它在HTTP调用(异步)后获取值 在另一种方法中,我使用相同的变量:permittedPefsJavascript Angular 6:async等待某个变量得到它的变量,javascript,angular,typescript,asynchronous,ecmascript-6,Javascript,Angular,Typescript,Asynchronous,Ecmascript 6,在我的Angular 6应用程序下,我有一个变量“permittedPefs”,它在HTTP调用(异步)后获取值 在另一种方法中,我使用相同的变量:permittedPefs @Injectable() export class FeaturesLoadPermissionsService { permittedPefs = []; constructor() { this.loadUserPefsService.getUserRolePefs(r
@Injectable()
export class FeaturesLoadPermissionsService {
permittedPefs = [];
constructor() {
this.loadUserPefsService.getUserRolePefs(roleId)
.subscribe(
(returnedListPefs) => {
this.permittedPefs = returnedListPefs;
},
error => {
console.log(error);
});
}
}
但是,由于它最初是空的,并且经过一段时间后会得到它的值,所以我需要等待它重新使用它
我已经尝试使用异步等待,我的目的是等待permittedPefs获得一个对象值
async checkPefPresence(pefId) {
const listPefs = await this.permittedPefs
}
如何修复它???使用行为主体
@Injectable()
export class FeaturesLoadPermissionsService {
permittedPefs: BehaviorSubject<any[]> = new BehaviorSubject([]);
constructor() {
this.loadUserPefsService.getUserRolePefs(roleId)
.subscribe((returnedListPefs) => {
this.permittedPefs.next(returnedListPefs);
},
error => {
console.log(error);
});
}
}
由于loadUserPefsService.GetUserRolePrefs方法返回Observable,所以您可以存储它,并在以后需要时订阅它
@Injectable()
export class FeaturesLoadPermissionsService {
permittedPefs = [];
constructor() {
this.userRolePefsObservable = this.loadUserPefsService.getUserRolePefs(roleId);
}
}
checkPefPresence(pefId) {
let listPefs;
this.userRolePefsObservable.subscribe(
(returnedListPefs) => {
listPefs = returnedListPefs;
},
error => {
console.log(error);
});
}
不要订阅
getUserRolePefs()
,只需返回Observable
。然后,在另一种方法中,您可以订阅permittedPefs
并继续工作。将订阅移动到ngOninit
@Injectable()
export class FeaturesLoadPermissionsService {
permittedPefs = [];
constructor() {
this.userRolePefsObservable = this.loadUserPefsService.getUserRolePefs(roleId);
}
}
checkPefPresence(pefId) {
let listPefs;
this.userRolePefsObservable.subscribe(
(returnedListPefs) => {
listPefs = returnedListPefs;
},
error => {
console.log(error);
});
}