首页 > 解决方案 > Angular 6:async await some variable got it variable

问题描述

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

 @Injectable()
 export class FeaturesLoadPermissionsService {
    permittedPefs = [];
    constructor() {       
       this.loadUserPefsService.getUserRolePefs(roleId)
                               .subscribe(
              (returnedListPefs) => {
                this.permittedPefs = returnedListPefs;
              },
              error => {
                console.log(error);
              });
    }
}

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

但由于它最初是空的,并且在一段时间后它得到了它的价值,所以我需要等待它重新使用它。

我尝试使用async-await,我的目的是等待allowedPefs获得对象值

  async checkPefPresence(pefId) {
    const listPefs = await this.permittedPefs
  }

如何解决?

标签: javascriptangulartypescriptasynchronousecmascript-6

解决方案


使用行为主题

  @Injectable()
    export class FeaturesLoadPermissionsService {

      permittedPefs: BehaviorSubject<any[]> = new BehaviorSubject([]);

      constructor() {
        this.loadUserPefsService.getUserRolePefs(roleId)
          .subscribe((returnedListPefs) => {
            this.permittedPefs.next(returnedListPefs);
          },
            error => {
              console.log(error);
            });
      }
    }

然后你在哪里检查它(完成后记得取消订阅)

如果它必须是异步的,你可以像下面那样做

  async checkPefPresence(pefId): Promise {
    return new Promise((resolve, reject) => {
      this.featuresLoadPermissionsService.permittedPefs.subscribe(listPefs  => {
          //handle whatever check you want to do here 
          resolve();
      },reject);
    })

推荐阅读