angular 等待方法完成或变量被初始化

Vik*_*Vik 7 javascript promise typescript angular

我有一个用作本地数据存储的服务来跨应用程序共享数据。该服务在开始时会进行一些休息调用以初始化一些数据。它看起来像这样:

Injectable()
export class DataStoreService {
     leadList: LeadModel[]
     optyList: ContactModel[]

     constructor(public dataService:DataService){
         this.initializeData()
     }

     initializeData() {

         this.dataService.getObjectData('opportunities').subscribe(
             (data) =>  this.optyList = data
         )

         this.dataService.getObjectData('leads').subscribe(
             (data) =>  this.leadList = data
         )
     }
}
Run Code Online (Sandbox Code Playgroud)

我有一个组件页面,我在下面做:

ngOnInit() {
     for(let lead of this.dataStore.leadList){
             if(lead.accepted == false)
              this.newLeadsList.push(lead)
     }
}
Run Code Online (Sandbox Code Playgroud)

很明显,如果初始化数据没有完成,leadList 可能是未定义的,这个 ngOnInit for 循环也会崩溃。那么,如何在 ngOnInit 中等待 initializeData 完成?

Kam*_*ski 4

从构造函数中删除initializeData()并执行如下操作:

public async initializeData()
{
   this.optyList = await this.dataService.getObjectData('opportunities').toPromise();
   this.leadList = await this.dataService.getObjectData('leads').toPromise();
}


async ngOnInit() 
{
     await initializeData();

     for(let lead of this.dataStore.leadList){
         if(lead.accepted == false)
         this.newLeadsList.push(lead)
     }  
}  
Run Code Online (Sandbox Code Playgroud)

我从头编写了代码,因此它可能有一些错误 - 可能是异步的,也应该在函数之前ngOnInit()......检查一下。

Async-await-toPromise 使您的异步函数表现为同步函数...并且 JS 会等到您的 toPromise 完成后再执行另一个 Promise...

更新

如果我理解正确的话:您想调用您的服务“ DataStoreService.initializeData()”一次并在将来在其他组件中使用它(而不再次调用initializeData)-?- 如果是,那么您需要服务单例(也可以在上面的异步等待技术中使用)