web-dev-qa-db-ja.com

async / awaitを使用してAjax結果を返す方法は?

async/awaitに慣れるために、Chromeで次のコードを試しました。

async function f() { 
     return await $.get('/');
};
var result = f();

しかしresultは結果(文字列)を保持しません。むしろ、再び待つ必要があるPromiseを保持します。このコードは応答文字列を私に与えます:

var response = await $.get('/');

Awaitを使用して関数から実際の応答文字列を返すにはどうすればよいですか?

4
user3599803

どちらか

function f() { 
  return $.get('/');
};

async test() {
  var x = await f()
  console.log(x)
}

test()

または

f().then(function(res) {
    console.log(res)
}

async/awaitは、同じロジックを記述するもう1つの方法です。

16
messerbill

awaitasyncは基本的にPromiseの上にある単なる構文上の砂糖です。最後にPromiseが付く場合でも、Promiseのように扱う必要があります。

_const response = f().then(() => { });
_

または、非同期関数内で呼び出す場合は、解決するまで待つことができます。

_async function main() {
  const response = await f();
  console.log(response);
}
_

私が使用したいパターンは、メインコードを自己実行非同期関数でラップすることです。そのため、awaitを使用できます。

_(async () => {
  const result = await doSomething();
  console.log(result);
})();
_

そのパターンを使用しても、他の方法ではキャッチされない可能性のあるエラーをキャッチするには、最後のcatch()が必要です。

_(async () => {
  // blah blah
})().catch(() => {});
_
3
samanime