コンソールに最初に「1」を出力させたいのですが、非同期関数を呼び出してコードの次の行に進む前にその実行を待つ方法がわかりません。
const request = require('request');
async function getHtml()
{
await request('https://google.com/', function (error, response, body) {
console.log('1');
});
}
getHtml();
console.log('2');
もちろん、私が得ている出力は
2
1
async_function MDN に従って
戻り値
非同期関数によって返された値で解決されるか、非同期関数内からスローされたキャッチされない例外で拒否されるPromise。
非同期関数は常にプロミスを返し、その値にアクセスするには.then()
またはawait
を使用する必要があります
async function getHtml() {
const request = await $.get('https://jsonplaceholder.typicode.com/posts/1')
return request
}
getHtml()
.then((data) => { console.log('1')})
.then(() => { console.log('2')});
// OR
(async() => {
console.log('1')
await getHtml()
console.log('2')
})()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
関数の前にasync
キーワードを置くと、非同期関数になります。これは基本的に関数に対して2つのことを行います。
await
キーワードを使用できます。 await
キーワードを使用すると、Promiseが解決されるのを「待つ」ことができます。これにより、非同期コードを同期的に作成できます。たとえば、 このチュートリアル 。あなたの例では、JSアプリケーションでは常に非同期コードの前に同期コードが最初に終了するため、console.log(2)
は常に最初に終了します。プロミスは常に非同期であるため、名前が非同期を意味するため、async
機能です。詳細については、 イベントループ をご覧ください。
続行する前に.then()
を使用する前に、await
非同期関数を解決する必要があります。
await getHtml();
console.log('2');
または
getHtml()
.then(() => {
console.log('2');
});