2017-08-22 9 views
0

キャッチが終了するまで待つと約束しますか?この例では、最初に「1または2」が表示されているか、「最初または2番目」が最初に表示されていますか?。キャッチが終了するまで待ちます。

await promise().catch(()=>{ 
    await anotherPromise(); 
    alert("1 or 2"); 
}); 
alert("first or second"); 
+6

試してみてください。 –

答えて

1
Alert("1 or 2"); 

が最初に表示されます。

+0

すぐにお返事ありがとうございます!ですから、.catchメソッド自体が終了するまで、待ちます。 .then()メソッドと同じですか? –

+1

はい、これをすばやく読み取ることができます。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch 詳細をご説明ください –

+0

おかげさまで、ありがとうございました! –

1

operator predescendenceのように、ほとんど何も関数呼び出しとプロパティアクセス演算子を打つことはできません。あなたが行っていることとは無関係に:

await a.b.c().d; 

最初に評価され、結果が待たれます。だから、doesntの

promise() 

の結果ではなく、新たな約束を返します

promise.catch(..) 

の結果を待っています。だからあなたのコードは以下のようになります。

promise().catch(()=>{ 
    await anotherPromise(); 
    alert("1 or 2"); 
}).then(()=> alert("first or second")); 
1

はい、awaitは約束を待ち、.catch(…)は(あなたのケースで約束です)コールバックの結果を解決する約束を返します。

ただし、コールバック関数asyncを忘れた場合は、awaitを使用すると構文エラーが発生します。とにかくこのように書くのではなく、むしろ使用してください。

try { 
    await promise(); 
} catch { 
    await anotherPromise(); 
    alert("first"); 
} 
alert("second"); 

また、アラートがどのような順序で発生する可能性があるかを明確にしています。

+0

まだ最初の答えについては面白いです...これはおそらくより正確でしょう –

関連する問題