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

推薦する

vue3.0共通コンポーネントの自動インポート方法の例

1. 前提条件インポートには require.context メソッドを使用します。vite で作成...

jsはキャンバスに基づいて時計コンポーネントを実装します

圧縮アップロード画像、スクラッチカード、ポスター作成、チャートプラグインなど、フロントエンド開発にお...

Win10にnginxをインストールして設定するプロセス

1. はじめにNginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プロキ...

Linux デスクトップ用の 4 つのスキャン ツール

ペーパーレスの世界はまだ到来していませんが、書類や写真をスキャンすることで紙をなくす人が増えています...

JS の原価と基準価額の問題に関する簡単な分析

プリミティブ値 -> プリミティブ型Number String Boolean undefin...

MySQL サービスに iptables ファイアウォール ポリシーを追加するためのソリューション

MySQL データベースが Centos7 システムにインストールされており、オペレーティング シス...

SpringbootはDockerデプロイメントを統合し、Dockerイメージを構築する2つの方法を実装します。

Docker は、あらゆるアプリケーション用の軽量でポータブルな自己完結型コンテナーを簡単に作成で...

MySQL ストアド プロシージャ関連の権限変更の問題

MySQL データベースを使用すると、他のユーザーが定義したストアド プロシージャを他のユーザーが変...

Dockerコンテナのデータを復元する方法

プロジェクトのテスト環境データベースのデータが失われてしまったので、記録しておきたいと思います。当時...

CocosCreatorで複数のタイマーを使用する方法の詳細な説明

1.タイムアウトを設定する3 秒後に abc を印刷します。一度だけ実行します。 setTimeou...

Ubuntu 18.04 で中国語入力方法を設定する方法

Ubuntuの最新バージョンでは、ユーザーは中国語入力方法を別途ダウンロードする必要がなくなりました...

Node.js の fs モジュールと Path モジュールのメソッドの詳細な説明

概要:ファイルシステム モジュールは、標準の POSIX ファイル I/O 操作セットをラップしたシ...

LinuxにPython 3.6をインストールして落とし穴を避ける

Python 3のインストール1. 依存環境をインストールするPython3 はインストール プロセ...

1 つの記事で Vuex を理解する

目次概要Vuex の 4 つの主要オブジェクト状態の使用突然変異の使用ゲッターの使用アクションの使用...

Dockerはローカルディレクトリとデータボリュームコンテナ操作をマウントします

1. DockerはローカルディレクトリをマウントしますDocker は、ホスト上のディレクトリをイ...