非同期関数は非ブロッキングであり、結果を待つのではなく、すぐに約束を返します。これは、例えば、複数の非同期関数が、それぞれが順次実行されるのではなく、同時に実行されることを可能にする。
結果を待つために、awaitキーワードを使用して、約束が解決されるまでブロックすることができます。 awaitコマンドは、約束の結果を返します。例えば、get関数の結果をログに記録するには、最後の行を変更することができます。
console.log(await get('http://www.httpbin.org/ip'))
UPDATE:私は暴行していた場合
は申し訳ありませんが(私はこの1つ以上試してみてみましょうここの死んだ馬)。
response
変数は非同期関数なので、戻り値の型は非同期関数の定義による約束です。変数ret
が待たれているにもかかわらず、変数ret
に書き込む間にブロックされることを意味します。完了するためには、response
非同期機能を完了まで実行する必要があります。あなたは、戻り値を待ってから、後処理を追加したい場合は、ここでのawaitは有用であろうが、この例では具体的には、あなたのtryブロックは、単純に次のようになります。request
以来
try {
return request(url, _opt)
}
がすでに約束を返し、暗黙のうちに余分な約束事を生み出すため、余分なオーバーヘッドが発生することを余儀なくされています。
response
が約束しており、response
を返すので、get
という関数も約束を返しています。あなたはこの約束を記録しようとしています(明らかにうまくいかない)。このため、await
または.then
get
の結果を得る必要があります。
出典:下https://medium.com/@bluepnume/learn-about-promises-before-you-start-using-async-await-eb148164a9c8:
それは私が欲しいものではありません。関数が応答を返すようにしたい。これはできないと言っていますか? – pguardiario
@pguardiarioできません。最初にコールバックから始め、非同期/待機のようなもっと複雑なものを掘り下げる前に、非同期実行用にコードを構造化する方法を学ぶことを強くお勧めします。 – slebetman
しかし私はなぜか分からない。関数がブロックされていることがわかります。つまり、関数が戻る前にリソースがロードされています。なぜ私はそれを直接アクセスできないのですか? – pguardiario