Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular 6:async等待某个变量得到它的变量_Javascript_Angular_Typescript_Asynchronous_Ecmascript 6 - Fatal编程技术网

Javascript Angular 6:async等待某个变量得到它的变量

Javascript 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

在我的Angular 6应用程序下,我有一个变量“permittedPefs”,它在HTTP调用(异步)后获取值

在另一种方法中,我使用相同的变量:permittedPefs

 @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);
         });
 }