[解決済み] Async / await vs then パフォーマンスに最適なのはどちらか?
質問
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()
は全く異なるものであり、どちらがシンプルに見えるかは状況によって異なります。
関連
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] モバイル端末の検出にはどのような方法がありますか?
-
[解決済み] どのDOM要素にフォーカスがあるかを調べるには?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] 非同期アロー関数のシンタックス
-
[解決済み] async/await関数を並列に呼び出す
-
[解決済み] 非同期関数+await+setTimeoutの組合せ
-
[解決済み] 複数のタスクにasync/awaitを使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】 Uncaught Error: Invariant Violation: 解決済み】 Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object.
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】'useState' が定義されていない no-undef React