JS で async と await を使用する方法

JS で async と await を使用する方法

1. 非同期

async 、非同期コードが実行されるコード ブロックを定義する非同期関数を作成します。

それを非同期関数に変換するにはどうすればよいでしょうか?これは関数の前に配置できるキーワードasyncで始まります。

非同期関数f(){
  1 を返します。
}
 
f().then(アラート); // 1
 
//結果は上記と同じ async function f() {
  Promise.resolve(1) を返します。
}
 
f().then(アラート); // 1
 
//矢印関数を使用することもできます let hello = async () => { return "1" };
hello().then((値) => console.log(値))
//戻り値は次のように簡略化することもできます hello().then(console.log)

非同期関数の特徴の 1 つは、関数の戻り値がpromiseであることが保証されることです。

関数宣言にasyncキーワードを追加すると、値を直接返すのではなく、 promiseを返すように指示されます。さらに、 awaitの使用をサポートすることで、同期関数の潜在的なオーバーヘッドを回避します。

2. 待つ:

await非同期関数内でのみ機能します。これを任意の非同期のawaitキーワードに配置すると、 JavaScriptエンジンはpromiseが完了して結果が返されるまで待機します。 promiseを待っている間に、実行を待っている他のコードが実行される機会があります。

Web API関数を含む、 Promiseを返す任意の関数を呼び出すときにawaitを使用できます。

非同期関数f(){
  promise = new Promise((resolve, deny) => { とする
    setTimeout(() => 解決("ブーム!"), 1000)
  });
 
  let result = await promise; // promise が解決するまで待機します。alert(result); // "Boom!"
}
 
f(); // 結果を取得して実行を続行します。したがって、上記のコードは 1 秒後に「Boom!」と表示します。

注: await は実際には、promise ステータスが満たされるまで関数の実行を一時停止し、promise の結果を使用して実行を続行します。 JavaScript エンジンは他のスクリプトの実行、イベントの処理など、他のタスクを同時に処理できるため、この動作では CPU リソースが消費されません。

3. 包括的なアプリケーション

async/await awaitが待機するため、あらゆる場所から.then()コード ブロックを取り除くことができます。

非同期関数A() {
  応答を待機して fetch('c.jpg');
  myBlob = response.blob() を待機します。
 
  objectURL を URL.createObjectURL(myBlob) とします。
  image = document.createElement('img'); を作成します。
  image.src = オブジェクトURL;
  document.body.appendChild(画像);
}
 
あ()
.catch(e => {
  console.log('問題: ' + e.message);
});

コードをより少ない.then()ブロックでラップすると、同期コードに非常によく似たものになり、非常に直感的になります。このように使うととてもクールです!

JS async/await使い方についてはこれで終わりです。JS async/await の使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JS ループで async と await を正しく使用する方法
  • JS で async await をエレガントに使用する方法
  • JavaScript のよりエレガントなエラー処理方法 async await
  • JavaScript の async と await のシンプルで詳細な学習
  • JavaScript における async と await の使い方とメソッド
  • JavaScript PromiseとAsync/Awaitの詳細な説明

<<:  Docker ケース分析: MySQL データベース サービスの構築

>>: 

推薦する

React Nativeでシンプルなゲームエンジンを作る

目次導入始めるReact Nativeゲームエンジンの簡単な紹介React Nativeでスネークゲ...

データベースのデフォルトパスを変更した後にmysqlが起動できない問題の解決策

序文mysql がデフォルトのデータベース パスを変更したため、サービスを開始できませんでした。ログ...

CentOS7 システムでスワップを増やす方法の例

序文スワップは、ディスク上にある「仮想メモリ」の一部である特殊なファイル (またはパーティション) ...

Alibaba Cloud SSHリモート接続がしばらくすると切断される問題を解決

問題の再現Alibaba Cloud Server は、Finalshell リモート接続を使用して...

MySQLの日付と時刻関数の使用の概要

この記事はMySQL 8.0に基づいていますこの記事では、日付と時刻の操作のための MySQL 関数...

html2canvas を使用して、Baidu マップを含む Dom 要素を画像に処理するソリューション

問題 1: Baidu Map はタイル画像 (地図が写真で構成されている) を使用しています。ht...

CentOS 7 での Docker プロキシの設定 (Linux での Systemd サービスの環境変数設定)

Docker デーモンは、 HTTP_PROXY 、 HTTPS_PROXY 、およびNO_PRO...

Nginx メモリプールのソースコード分析

目次メモリプールの概要1. nginxデータ構造2. nginxはOSからスペースngx_creat...

Vue.js $refs 使用例の説明

プロパティやイベントがあるにもかかわらず、JavaScript で子コンポーネントに直接アクセスする...

CSS3 で作成した本のページめくり効果

結果:実装コード: html <!-- よろしければハートを付けてください! --> &...

Vueは小さなカウントダウン機能を実装します

多くのプロジェクトでは、検証コードの送信など、カウントダウン機能を実装する必要があります。ここで、簡...

Vueはページの部分的なリフレッシュを実装します(ルータビューのページリフレッシュ)

Vue でprovide+inject組み合わせを使用するまず、App.vue を変更する必要があ...

JavaScript Sandboxについての簡単な説明

序文:サンドボックスといえば、私たちの頭には反射的に上の写真が思い浮かび、すぐに興味がわいてくるかも...

Mysql5.7 のルートパスワードを忘れた場合の対処法 (シンプルで効果的な方法)

前回の記事では、MySQL 5.7でルートパスワードを忘れた場合と、MySQL 5.7でルートパスワ...

クリエイティブな会社概要ウェブページデザイン

ユニークな「About」ページ自分を他の人たちと差別化する素晴らしい方法は、本当にユニークな自己紹介...