我有方法:
prepareCalendarDaysToAdd() {
this.getDaysToAdd(); //first line
this.dataSaved.emit(this.daysToAdd); //second line
}
getDaysToAdd()方法是一个异步调用:
getDaysToAdd() {
this.daysService.getDaysInSpecificYearWith(this.toDate.year).subscribe(
data => {
this.getCalendarDaysFrom(data);
},
error => { console.error(error); },
() => {
this.getCalendarDaysBetween();
}
)
}
问题在于数据在准备之前就发出了。 我如何才能确定第一行的异步调用是否完成?
所以我尝试获取的确切代码是:
prepareCalendarDaysToAdd() {
if getDaysToAdd is finished then emit list of days
}
我试图兑现解决这个问题的承诺,但似乎我不明白它应该如何工作。
prepareCalendarDaysToAdd() {
const promise = new Promise((resolve, reject) => {
this.getDaysToAdd(); //first line
resolve();
})
.then(
() => {
this.dataSaved.emit(this.daysToAdd); //second line
}
);
});
答案 0 :(得分:1)
使用以下代码解决您的问题:
在this.dataSaved.emit(this.daysToAdd);
下面的订阅函数内添加this.getCalendarDaysFrom(data);
作为其异步调用,以便可以在其订阅内部完成数据发射
prepareCalendarDaysToAdd() {
this.getDaysToAdd(); //first line
// removed second line
}
getDaysToAdd() {
this.daysService.getDaysInSpecificYearWith(this.toDate.year).subscribe(
data => {
this.getCalendarDaysFrom(data);
this.dataSaved.emit(this.daysToAdd); // Added in success block of subscription
},
error => { console.error(error); },
() => {
this.getCalendarDaysBetween();
}
)
}