在angular 6中使用toPromise的正确方法

时间:2018-07-14 16:01:38

标签: javascript angular rxjs observable angular6

我试图从多个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()

2 个答案:

答案 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();