我有两种方法,我想在执行进一步的代码之前等待结果。 我尝试在func名称之前使用async并在GetNavigationData()之前等待,但是没有结果。 我还尝试打印值以查看发生了什么,预期的数据应该是:
API方法
常规方法
getFlatNavigation(navigation) {
if (this.navigation.length == 0) {
console.log(this.GetNavigationData());
console.log('Regular method');
}
}
GetNavigationData() {
let applicationMenuData = new InitializeAppRequest();
this.http.post(this.appGlobal.BASE_SERVER_ADDRESS + 'api/AppServer/InitializeApp', applicationMenuData).subscribe((res) => {
console.log('API method');
return res['AplicationMenuData'];
});
}
如何获得预期的结果?
答案 0 :(得分:1)
您可以使用async / await
async getFlatNavigation(navigation) {
if (this.navigation.length == 0) {
console.log(await this.GetNavigationData());
console.log('Regular method');
}
}
GetNavigationData() {
let applicationMenuData = new InitializeAppRequest();
return this.http
.post(this.appGlobal.BASE_SERVER_ADDRESS + 'api/AppServer/InitializeApp', applicationMenuData)
.pipe(
map((res) => {
console.log('API method');
return res['AplicationMenuData'];
})
)
.toPromise();
}
答案 1 :(得分:0)
async
/ await
要求您使用Promise
,但是由于Angular继续使用Observables,因此您可以简单地使用该语法。
您可以从Observable
方法返回一个GetNavigationData
,然后在您调用getFlatNavigation
的{{1}}中进行订阅
GetNavigationData
答案 2 :(得分:0)
async getFlatNavigation(navigation) {
if (this.navigation.length == 0) {
console.log(await this.GetNavigationData());
console.log('Regular method');
}
}
async GetNavigationData() {
let applicationMenuData = new InitializeAppRequest();
this.http.post(this.appGlobal.BASE_SERVER_ADDRESS + 'api/AppServer/InitializeApp', applicationMenuData).subscribe((res) => {
console.log('API`enter code here` method');
return res['AplicationMenuData'];
});
}