我试图从多个http请求中检索数据,因此我决定避免嵌套的subscription()。我只想以异步等待样式编写代码。
const diagnostics = this.http.get(url, {params: params}).toPromise()
console.log(diagnostics);
但是我明白了:
// ZoneAwarePromise {__zone_symbol__state: null, __zone_symbol__value: Array(0)}
我不知道如何提取数据。
有没有办法避免像这样的回调?
.then(res => {}).catch()
答案 0 :(得分:2)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
听起来像您可能希望看一下它,您可以整理一个promise数组,并且可以对所有promise进行“等待”,然后再对值进行操作。
{{1}}
答案 1 :(得分:1)
您注意到,.toPromise
方法的结果是Promise对象。为了使用async / await样式,首先需要使用async函数包装代码,方法是将async
关键字添加到函数之前,然后使用await
关键字告诉代码等待异步操作。在您的情况下,这是http请求。
async function run(){
try{
const diagnostics = await (this.http.get(url, {params: params}).toPromise());
// wait for asynchronous request
console.log(diagnostics);
} catch(err){
// request failed
console.error(err);
}
}
run();