web-dev-qa-db-ja.com

angular 6でtoPromiseを使用する正しい方法

複数のhttpリクエストからデータを取得しようとしているので、subscribe()のネストを避けることにしました。非同期の待機スタイルでコードを記述したいだけです。

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()
4
sandum

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

これを見てみたいと思うかもしれませんが、約束の配列を照合し、本質的にすべての約束が完了するのを待ってから、値を操作することができます。

myPromiseArray.Push(this.http.get(url, {params: params}).toPromise()) Promise.all(myPromiseArray).then(alltheValuesInAnArray => {})

2
Jake Kalstad

お気づきのとおり、.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();
1
Nurik Nurmetov