Javascript JS等待函数,直到它接收到数据
当涉及到首字母缩略词方法时,我总是被卡住,因为我在体验代码中的一些问题。希望你们能帮助我 所以基本上,我在onInit上有两个功能;但是,当“fetchSalesbyDay2”运行时,this.firstResponse接收未定义的响应,并且不保存来自“fetchSalesbyDay1”的第一个响应 我希望,一旦“fetchSalesbyDay1”完成,并且this.firstResponse已经有了一个值,“fetchSalesbyDay2”就可以执行了。Javascript JS等待函数,直到它接收到数据,javascript,angular,asynchronous,Javascript,Angular,Asynchronous,当涉及到首字母缩略词方法时,我总是被卡住,因为我在体验代码中的一些问题。希望你们能帮助我 所以基本上,我在onInit上有两个功能;但是,当“fetchSalesbyDay2”运行时,this.firstResponse接收未定义的响应,并且不保存来自“fetchSalesbyDay1”的第一个响应 我希望,一旦“fetchSalesbyDay1”完成,并且this.firstResponse已经有了一个值,“fetchSalesbyDay2”就可以执行了。 解决这个问题的最佳方法是什么?您不需
解决这个问题的最佳方法是什么?您不需要对可观察对象使用
async/await
。如果您想在响应到来后执行另一个函数,只需在subscribe after属性赋值中执行它,如下所示:
.subscribe((response: any) => {
this.firstResponse = response;
this.fetchSalesByDay2();
});
您可以删除所有
async/await
您不需要对可观察对象使用async/await
。如果您想在响应到来后执行另一个函数,只需在subscribe after属性赋值中执行它,如下所示:
.subscribe((response: any) => {
this.firstResponse = response;
this.fetchSalesByDay2();
});
您可以删除所有
async/await
而无需更改代码。您可以在提取函数之外添加wait,如下所示:
fetchSales = async () => {
await fetchSalesbyDay1();
await fetchSalesbyDay2();
}
这样,fetchSalesbyDay2()将等待第一个函数完成。在不更改代码的情况下,您可以在fetch函数外部添加wait,如下所示:
fetchSales = async () => {
await fetchSalesbyDay1();
await fetchSalesbyDay2();
}
通过这种方式,fetchSalesbyDay2()将等待第一个完成。基本上没有理由将可观察的内容转换为承诺。Observable提供了更好的组合异步数据的选项。在这种特定情况下,您可以使用RxJS函数来组合这两个观察值 试试下面的方法
从'rxjs'导入{forkJoin,Observable};
ngOnInit():void{
forkJoin({//{
这个.显示和处理工作日数据(第一个、第二个);
},
错误:错误=>{
console.log(错误);
//处理错误
}
});
}
fetchSalesbyDay1():Observable{/基本上没有理由将Observable转换为promises。Observable提供了更好的选项来组合异步数据。在这种特定情况下,您可以使用RxJS函数来组合这两个Observable
试试下面的方法
从'rxjs'导入{forkJoin,Observable};
ngOnInit():void{
forkJoin({//{
这个.显示和处理工作日数据(第一个、第二个);
},
错误:错误=>{
console.log(错误);
//处理错误
}
});
}
fetchSalesbyDay1():可观察的{/this.fetchSalesbyDay1()。然后(()=>this.fetchSalesbyDay2())
您需要使用RxJs运算符组合两个响应。如果只有第二个响应对您的组件很重要,您可以使用mergeMap,如果您需要两个响应来处理您的数据,您应该使用类似CombineTest的东西。看看这是否回答了您的问题?this.fetchSalesbyDay1()。然后()=>this.fetchSalesbyDay2())
您需要使用RxJs运算符组合两个响应。如果只有第二个响应对您的组件很重要,您可以使用mergeMap,如果您需要两个响应来处理数据,您应该使用类似CombineTest的东西。看看这是否回答了您的问题?