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
         )
     }
}
我有一个组件页面,我在下面做:
ngOnInit() {
     for(let lead of this.dataStore.leadList){
             if(lead.accepted == false)
              this.newLeadsList.push(lead)
     }
}
很明显,如果初始化数据没有完成,leadList 可能是未定义的,这个 ngOnInit for 循环也会崩溃。那么,如何在 ngOnInit 中等待 initializeData 完成?
从构造函数中删除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)
     }  
}  
我从头编写了代码,因此它可能有一些错误 - 可能是异步的,也应该在函数之前ngOnInit()......检查一下。
Async-await-toPromise 使您的异步函数表现为同步函数...并且 JS 会等到您的 toPromise 完成后再执行另一个 Promise...
如果我理解正确的话:您想调用您的服务“ DataStoreService.initializeData()”一次并在将来在其他组件中使用它(而不再次调用initializeData)-?- 如果是,那么您需要服务单例(也可以在上面的异步等待技术中使用)
| 归档时间: | 
 | 
| 查看次数: | 14406 次 | 
| 最近记录: |