web-dev-qa-db-ja.com

待機しても機能が終了するのを待ちません

私はJavaScriptに新しく、私は最初の非同期の待ち時間を実行しようとしました、そして私の問題がどこにあるのかを理解することができません。

getName() - 1秒後に約束を返すべきです。 f()] - getNameが終了してから印刷された名前を待つ必要があります。

何が行方不明ですか?

const getName = async () => {
  setTimeout(() => 'xxx', 1000)
};

const f = async () => {
  name = await getName()
  console.log(name)
}

f()
 _
8
Htpc Rad

awaitを使用しない限り、getNamegetName asyncを持つ必要はありません。Promiseを返す必要があります。 awaitは約束で動作します。

const getName = () => 
  new Promise(resolve => setTimeout(resolve, 1000, 'xxx'));

async f() {
  let name = await getName();
  console.log(name);
}

f();
 _
4
ZER0

関数を待つために、その関数は約束を返す必要があります。

したがって、新しい約束を作成する必要があります。 resolverejectの2つの方法があります。

  1. resolve変数を返し、成功して使用されます。 promise.then(value => )またはawaitを使用して、戻り値をキャッチできます。
  2. rejectエラーをスローし、エラーで使用されます。 promise.catch(err => )を使用するか、または非同期関数を待ってTry-Catchブロックで折り返すことでエラーをキャッチできます。

あなたのコードの外観は次のとおりです。

const getName = async () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('xxx');
    }, 1000)
  })
};

const f = async () => {
  name = await getName()
  console.log(name)
}

f() _
2
MadWard