在执行其余代码之前如何等待承诺



在我的服务中,我在 localstorage 中搜索一个变量:

constructor(private storage: Storage) {
    this.storage.get('value').then(
                (val) => {
                    this.value = val;
                },
                () => {
                    this.value = 'no value';
                });
    }

问题是我有一个方法:

getVariable(){
    return this.value;
}

此方法应返回值。但是值不是一开始就设置的。我该怎么做getVariable等到构造函数中的承诺解析?

您可以使用路由解析程序或依赖 OnInit 接口。如果您绝对需要等待承诺得到解决,请使用解析器。

下面是一个示例:

@Injectable()
export class MyResolver implements Resolve<any> {
  constructor(
    private storage: MyStorageService,) {
  }
  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<any> {
    return this.storage.get('value').then(
            (val) => {
                return val;
            },
            () => {
               return 'no value';
            });
  }
}

在路由配置中,将路由链接到解析程序,如下所示:

 {
    path: 'myyPath',
    component: MyComponent,
    resolve: {
      myResolvedValue: MyResolver // myResolvedValue is the key under which you'll be able to retrieved the resolved value. You can put whichever key you want
    },
  },

最后,将路由数据更改绑定到组件中(请注意,您必须实现 OnInit(:

 constructor(private route: ActivatedRoute) {
 }
 ngOnInit(): void {
    this.route.data.subscribe(data => {
      this.value= data['myResolvedValue'];
    });
  }

相关内容

  • 没有找到相关文章

最新更新