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で実装された読み込みアニメーション

推薦する

WeChatミニプログラム公式顔認証の詳しい説明

ミニプログラムはユーザーの個人情報を収集してアップロードしましたが、拒否されました。こんにちは、ミニ...

MySQL 中断された接続警告ログの分析

序文:場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通...

CentOS7 での MySQL 8.0.16 のインストールと設定のチュートリアル

MySQLの古いバージョンをアンインストールします(古いバージョンがない場合は、この手順をスキップし...

MYSQLテーブルの包括的な概要

目次1. テーブルを作成する1.1. テーブルを作成するための基本構文1.1.1. シンプルなテーブ...

Navicatを使用してクラウドサーバーデータベースにリモート接続する方法

秘密鍵を開かずにリモート サーバーのデータベースに接続するのは非常に便利です。新しい接続でデータを入...

mySQLキーワードの実行優先度の説明

以下のように表示されます。表から条件フィールドでグループ化仮想テーブルとフィールドを作成し、フィール...

Dockerはローカルイメージとコンテナの保存場所を設定します

指定したサイズより大きいファイルを検索するには、find コマンドを使用します。 検索 / -typ...

Nginx における accept lock の仕組みと実装の詳細な説明

序文nginx はマルチプロセス モデルを使用します。リクエストが届くと、システムはプロセスをロック...

Vue マルチ選択リスト コンポーネントの詳細な説明

マルチ選択は、すべてのオプションを一覧表示し、ユーザーが Ctrl/Shift キーを使用して複数選...

全画面ページのスクロール効果を実現するJavaScript

JavaScript DOM を読み終えた後、解釈型 JavaScript スクリプト言語に対する...

MySQL の中国語ソートの詳細と例

MySQL の漢字ソートの詳細な説明デフォルトでは、MySQL は日付、時刻、および英語の文字列の並...

Vue3 スロットの使用状況の概要

目次1. Vスロットの紹介2. 匿名スロット3. 名前付きスロット4. スコープ付きスロット5. 動...

MySQL 8.0.17 解凍版のインストールと設定方法のグラフィックチュートリアル

インストール中に遭遇した問題を記録しておきますので、皆様のお役に立てれば幸いです。 1. ダウンロー...

win10にUbuntu18デュアルシステムをインストールするとmmx64.efiが見つからないという問題が発生する

Ubuntu 18のインストール中に、USBディスクからUbuntuのインストールを開始すると、mm...

Vueコンポーネントの基本のまとめ

コンポーネントの基本1 コンポーネントの再利用コンポーネントは再利用可能な Vue インスタンスです...