JavaScript の非同期処理で待機時間を節約できますか?

JavaScript の非同期処理で待機時間を節約できますか?

JavaScriptで非同期実行の結果を同期的に取得するには、 for ループ内でawaitを使用する必要があることは以前から知っていました。Promise.All を使用しないと、非同期は機能しません。しかし、実行結果を待つ必要があるたびに、 asyncawaitを使用する必要があります。これは面倒ですし、見栄えも良くないと思います。この2つの単語の書き方を覚えていれば良いのですが、覚えていないと毎回スペルを間違えて思考が中断してしまいますし、突然そのような単語が出てきたら見栄えも悪くなります。

そこで私はこの問題を解決するために全力を尽くしました。車輪の再発明に誇りを持つプログラマーとして、 JavaScriptの変化に少しでも貢献することが私の責任だと考えています。

次のコードを考えてみましょう。

定数 trans = require('node-google-translate-skidz');

関数 translate (str, strEn, tarEn) {
  p = () => {とする
    新しい Promise を返します ((resolve, reject) => {
      トランス({
        テキスト: str,
        ソース: strEn ? strEn : 'zh',
        ターゲット: tarEn ? tarEn : 'en'
      }, 関数 (結果) {
        解決(結果.翻訳)
      });
    })
  }
  非同期() => {
    b = p() を待つ
    コンソールログ(b);
  }
  ()を返す
  //コンソールログ(b)
}


c = translate('中国語') とします。
コンソールログ('c', c)

このコードはおそらく、非同期の問題を解決するために私が思いついた最善の解決策ですが、答えはまだ成功していません。しかし、 JavaScriptでは、どのようにラップするか、どのようなテクノロジーを使用するかに関係なく、 asyncawait実際に避けることができない理由がようやくわかりました。

translate メソッドが呼び出される場所を確認し、呼び出し後に翻訳結果を出力します。これを行う目的は、もちろん、結果が出た後でそれを印刷することです。Promise Promise { <pending> },それは待機せずに直接実行されることを意味します。

結果が利用可能になった後に印刷するという目的を達成するために、 translateメソッドにasync()=>{await},を巧みにカプセル化し、 translate await実行の結果を返すようにしました。しかし、この方法はうまくいきません。なぜなら、最終的な印刷結果は、どうしても避けたいものだからです。

なぜ? async functionでのみ機能することを忘れていたため、 asyncにはスコープがあることになります。メソッドlet c = translate('中文')を実行した後、コンパイラーtranslate await が必要であることを伝えなかったため (translate はasyncawaitを実装しているので、実行結果が返されるのをtranslate自動的に待機すると考えていました。ただし、スコープが存在するため、translate 内のスコープはtranslateメソッドの実行に影響を与えることはできません)、コンパイラーは直接console.log('c', c)を実行し、 Promise { <pending> } を出力しました。

スコープの概念を導入することで、メソッド本体のasyncawait 、メソッド呼び出しレベルもasyncawaitにすることができなくなります。JavaScript の非同期JavaScriptで await を省略できない理由はおわかりいただけると思います。

これで、「JavaScript の非同期処理で await を省略できますか?」の記事は終了です。JavaScript の非同期処理の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JS 非同期スタック トレース: await が Promise よりも優れている理由
  • JS で async/await を使用して非同期呼び出しを実装する方法
  • NodeJsはasync/awaitを通じて非同期メソッドを処理します
  • async/await と promise (Node.js における非同期操作の問題)

<<:  div 内の img と span の垂直方向の中央揃えの問題について

>>:  CSS3で実装された読み込みアニメーション

推薦する

Javascript で関数のカリー化とデカリー化を実装する方法

関数のカリー化(黒い疑問符の顔)? ? ?カレー(黒い疑問符の顔)? ? ?これは完璧な中国語翻訳で...

MySQL GTID の総合概要

目次01 GTIDの紹介02 GTIDの仕組み03 GTIDの利点と欠点04 テスト環境構築05 テ...

MySQL交換パーティションの詳細な例

MySQL交換パーティションの詳細な例序文exchange パーティションを紹介する前に、まず my...

Linux サーバーのグラフィック カードのクラッシュの解決策

ログインインターフェースの解像度が特に大きい場合、グラフィカルインターフェース全体が特に大きくなり、...

プライベートイメージウェアハウスを構築するためのDockerレジストリの実装方法

マイクロサービスのイメージは、保存用に Docker リポジトリにアップロードされます。一般的に使用...

モバイル ブラウザのビューポート パラメータ (Web フロントエンド デザイン)

モバイル ブラウザは、Web ページを仮想の「ウィンドウ」(ビューポート) に配置します。このウィン...

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します...

JSは検証コードのランダム生成を実装します

この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...

JSはclip-pathを使用して動的領域クリッピング機能を実装します

背景今日、CodePen を閲覧していたところ、非常に興味深い効果を見つけました。 CodePen ...

MySQLのint主キーの自己増分の問題を解決する

導入MySQL データベースを使用する場合、int を主キーとして使用し、自動インクリメントに設定す...

バックアップ データをインポートするときに innodb_index_stats がエラーを報告する場合の主キー競合の解決方法

障害の説明percona5.6、mysqldump フルバックアップ、バックアップデータのインポート...

Mysql マスタースレーブ同期構成の実践の詳細な説明

1. はじめに以前、「MySQL マスター スレーブ同期の原理」という記事を書きました。この記事を読...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

MAC で MySQL のデフォルトの文字セットを utf8 に変更する方法

1. デフォルトでインストールされているMySQLの文字セットを確認するmysql> '...

Windows に WSL をインストールして構成する方法

WSLとはBaidu 百科事典からの一節を引用します。 Windows Subsystem for ...