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

推薦する

Vueルーティング相対パスジャンプメソッド

目次Vueルーティング相対パスジャンプ1. 属性の追加2.router.resolveメソッドVue...

Mysql の遅いクエリ操作の概要

MySQL の遅いクエリの説明MySQL スロー クエリ ログは、MySQL が提供するログ レコー...

Vueは動的コンポーネントを使用してTAB切り替え効果を実現します

目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...

Linux の Centos7 に Mysql5.7.19 をインストールする詳細なチュートリアル

1. MySQLをダウンロードするURL: https://dev.mysql.com/downlo...

一般的なDocker Composeコマンドの詳細な説明

1. Docker Compose の使用方法は docker コマンドの使用方法と非常に似ています...

Vue で Google サードパーティ ログインを実装するためのサンプル コード

目次1. 開発者プラットフォームの構成問題を解決する1. 開発者プラットフォームの構成1. 開発者プ...

Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法

序文まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived ...

画像にマウスを置いたときにズームイン/ズームアウトするには JS を使用します

マウスが画像上にあるときにズームインおよびズームアウトするには、JS を使用します。具体的なコードは...

js 加算、減算、乗算、除算の正確な計算方法のサンプルコード

序文コンピュータの数値は浮動小数点であるため、計算プロセス中に取得されるデータは通常正確ではなく、そ...

Node.js管理ツールnvmの詳細なインストール手順

いいえnvmはnodejsの複数のバージョンを管理する役割を担っています。インストール: https...

複数のサーバーにNginxリバースプロキシを実装する方法

Nginx は複数のサーバーをリバース プロキシします。つまり、nginx に異なるリクエストを送信...

Mybatis ページングプラグイン pageHelper の詳細な説明と簡単な例

Mybatis ページングプラグイン pageHelper の詳細な説明と簡単な例動作フレームワーク...

Nginx イントラネット スタンドアロン リバース プロキシの実装

目次1 Nginxのインストール2 Nginxの設定3 ホストファイルを変更する4 テストNginx...

DockerはMariaDBのサブライブラリとサブテーブル、および読み書き分離機能を実装します

目次1. はじめに2. 環境整備1. 基本環境3.Mysqlマスタースレーブ構成をインストールする1...

WeChat アプレット学習 WXS 使用方法チュートリアル

wxsとは何ですか? wxs (WeiXin Script) は、小規模プログラム用のスクリプト言語...