1. ホーム
  2. javascript

[解決済み] Async / await vs then パフォーマンスに最適なのはどちらか?

2022-03-06 14:44:14

質問

JavaScriptでAPIのリクエストを実行し、レスポンスを返すというシンプルなコードを持っているのですが、これは簡単なことです。しかし、この場合、私は何千ものリクエストを持つことになります。そこで、コードのオプションのうち、どちらがより良いパフォーマンスを発揮するか、そしてその理由は何ですか。また、最近、どちらが良いプラクティスとして推奨されていますか?

最初のオプションは、プロミスを解決するために.thenを使用することで、2番目はasync / awaitを使用することです。

私のテストでは、この2つのオプションは大きな違いなく非常に似た結果を出しましたが、規模についてはよくわかりません。

// Using then
doSomething(payload) {
  const url = 'https://link-here/consultas';
  return this.axios.get(url, {
    params: {
      token: payload.token,
      chave: payload.chave,
    },
   }).then(resp => resp.data);
}

// Using Async / await
async doSomething(payload) {
   const url = 'https://link-here/consultas';
   const resp = await this.axios.get(url, {
   params: {
     token: payload.token,
     chave: payload.chave,
    },
 });
 return resp.data;
}

どのような説明でも結構です。

どのように解決するのですか?

await の内部バージョンに過ぎません。 .then() (基本的に同じことをする)。 どちらかを選択する理由は、実際にはパフォーマンスとは関係なく、望ましいコーディングスタイルやコーディングの利便性に関係しています。 確かに、インタプリタには を最適化する機会が少し増える。 で内部的に await しかし、それでどちらを使うかを決めるのは難しいでしょう。 もし他のすべてが同じなら、私なら await というのが、上記の理由です。 しかし、私はまず、コードを書き、理解し、維持し、テストするのがより簡単な方を選びます。

適切に使用されている await は、しばしば コードの行数を減らすことができ、コードが読みやすく、テストしやすく、保守しやすくなります。 . そのために考案されたのです。

あなたのコードの2つのバージョンに、意味のある違いはありません。 アクシオスの呼び出しが成功したときも、エラーが発生したときも、どちらも同じ結果を得ることができます。

ここで await は、シリアライズする必要がある複数の連続した非同期呼び出しがある場合、より多くの利便性の違いを作ることができます。 その場合、それぞれの呼び出しを括弧で囲むのではなく .then() ハンドラを使って適切に連鎖させるためには、単に await で、見た目がよりシンプルなコードになります。

の両方についてよくある間違いです。 await.then() は、適切なエラー処理を忘れていることになります。 もしこの関数でのエラー処理が拒否されたプロミスを返すだけなら、どちらのバージョンも同じように処理されます。 しかし、複数の非同期呼び出しが連続していて、最初の拒否を返すだけでなくもっと複雑なことをしたいのであれば、そのような場合は のエラー処理テクニックは await.then() / .catch() は全く異なるものであり、どちらがシンプルに見えるかは状況によって異なります。