JS ES6 非同期ソリューション

JS ES6 非同期ソリューション

最初にコールバック関数を使用する

​ 当初はjsに明確な公式仕様がなかったため、各種サードパーティライブラリにカプセル化された非同期関数内で渡されるコールバック関数内のパラメータの仕様が明確でなく、各パラメータの意味が明確でなく、使い勝手が悪かった。

しかし、ノードには明確な仕様がある

ノード内のコールバック モード:

1. すべてのコールバック関数には2つのパラメータが必要です。最初のパラメータはエラーを示し、2番目のパラメータは結果を示します。

2. すべてのコールバック関数は関数の最後のパラメータである必要があります

3. すべてのコールバック関数は属性として表示できない

es6 非同期処理モデル

Es6 の登場後、非同期処理の仕様と、すべての非同期シナリオに適した処理モデルが正式に提案されました。モデルには次の機能があります:

  • 不安定な段階と安定した段階の 2 つの段階。
  • 3 つの状態: 保留中、解決済み、拒否
  • 常に未解決ステージから解決済みステージにプッシュし、解決済みステージのステータスは変更されません。

タスクが解決された状態になった後、後続の処理が必要になる場合があります。

  • 解決後の処理を「解決可能」と呼ぶ。
  • 拒否されたキャッチ可能な後続の処理をキャッチ可能と呼ぶ。

この非同期モデルに合わせたAPI: promise

プロミスの使い方

コピー

const task = new Promise((resolve, deny) => {     
    // 保留中のタスク ステージのコード // すぐに実行 console.log("100 メートル長距離走を開始します");  
    タイムアウトを設定する(() => {  
       もし(Math.random() > 0.5){  
           // 成功: 完了 // 成功にプッシュする resolve("finished");  
       } それ以外 {  
           // 失敗: 足の骨折 // 失敗までプッシュする decline("足の骨折");  
       }  
    }, 1000)
});
タスク.then((結果) => {
  console.log(結果);
}).catch((エラー) => {
  コンソール.log(エラー);
})

1 秒後、タスクは解決済みにプッシュされ、後続の処理は then または catch で処理されます。

知らせ

保留中のステータス = > 拒否されたステータス:

コピー

1. 通話拒否

2. コード実行エラー

3. 手動でエラーをスローする

後続の処理関数は非同期である必要があり、マイクロ キューに配置されます。

js 実行スタックがクリアされた後、マイクロ キュー内のタスクが最初に実行されます。マイクロ キュー内のタスクがクリアされた後、マクロ キュー内のタスクが実行されます。

  • マクロタスクキューには、setTimeout、setInterval、setImmediately、I/O、UIレンダリングが含まれます。
  • Microtask キューには、promise、process.nexttick、Object.observe (現在は使用されていません)、Mutation.observe が含まれます。

async await は、es7 で追加された promise の構文糖衣です。これについて学ぶこともできます。この記事では、promise の概要のみを説明します。習得すべき詳細は他にもたくさんあります。

上記は JS ES6 非同期ソリューションの詳細です。ES6 非同期ソリューションの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JSでES6クラスの使い方をすぐにマスター
  • JS ES6 変数分割代入の詳細な説明
  • JS ES6 スプレッド演算子の魔法のような使い方
  • JS ES6における構造化分解についてお話しましょう
  • ES6 での Javascript 構造化分解の実装
  • JavaScript の ES6 仕様における let と const の使い方と違い
  • 実用的な JS 開発の問題を解決するための 24 の ES6 メソッド (要約)
  • JavaScript ES6クラスの実装原理の詳細な説明
  • JavaScript における ES6 プロキシの具体的な使用法
  • JS ES6コーディング標準の詳細な説明

<<:  意外と知らないLinuxのSSHコマンドの使い方7選を徹底解説

>>:  InnoDB タイプの MySql によるテーブル構造とデータの復元

推薦する

HTML 順序なしリスト 箇条書き 画像を使用した CSS の記述

少なくとも 5 冊のベストセラー書籍の順序なしリストを含む HTML ページを作成します。各書籍の前...

aタグのname属性とid属性を使用してページ内を移動する方法

以前はaタグのname属性を使ってジャンプする方法しか知らなかったのですが、idも使えることを今日知...

CentOS 8/RHEL 8 に Cockpit をインストールして使用する方法

Cockpit は、CentOS および RHEL システムで使用できる Web ベースのサーバー管...

MySQL における一般的なランキングの問題をいくつかまとめます

序文:一部のアプリケーション シナリオでは、成績や年齢によるランキングなど、ランキングの問題が発生す...

nginx設定ファイルの場所を見つける方法の詳細な説明

よく知らないサーバーの場合や、かなり前にインストールした場所を忘れてしまった場合、構成ファイルの場所...

Linuxにログインする際の文字セットの問題を解決する方法

文字セットエラーは常に存在するロケール: LC_CTYPE をデフォルト ロケールに設定できません:...

HTMLフレームワーク_Powernode Javaアカデミー

1. フレームワークブラウザのドキュメント ウィンドウには 1 つの Web ページ ファイルしか表...

ウェブページ内のFlash SWFファイルを変更する方法

これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...

Echart Bar の 2 列チャート スタイルの最も完全な詳細な説明

目次序文インストールと設定1. Echartsをインストールする2. Echartsをグローバルに導...

インデックスを設計する際の原則は何ですか? インデックスの障害を回避するにはどうすればよいでしょうか?

目次主キーインデックス頻繁にクエリされるフィールドのインデックスを作成する大きなフィールドのインデッ...

Docker で Harbor パブリック リポジトリを構築する方法の例

前回のブログ投稿では、レジストリのプライベート ウェアハウスについて説明しました。今日は、Harbo...

mysqlのkey_lenの計算方法についての簡単な説明

MySQL の explain コマンドは SQL のパフォーマンスを分析できます。その 1 つが ...

Docker を使用した ElasticSearch:7.8.0 クラスターのインストールに関する詳細なチュートリアル

ElasticSearch クラスターは、クラスターを構築するための動態請求的方式と靜態配置文件をサ...

HTML フォーム コントロールの無効な属性の読み取り専用と無効の概要

HTML でフォームの送信を無効にする方法は 2 つあります。 1. コントロールタグにreadon...

Vue3 プロジェクトで WeChat 認証ログインをエレガントに実装する方法

目次序文準備する実装のアイデアコードについて要約する序文WeChat 認証ログインは、WeChat ...