Promise は、ES6 で導入された非同期プログラミングのための新しいソリューションです。 Promiseの構文は、コンストラクタ、
Promiseの基本的な使い方Promise のインスタンス化 新しいPromise() インスタンス化時に 1 つのパラメータ (関数) を受け入れます。 この関数には、resolve と deny という 2 つのパラメーターがあります。 var promise = new Promise((resolve,reject) => { // 非同期操作を処理するために使用されます}) ここでは非同期操作をシミュレートするためにタイマーを使用します Promise には、進行中、成功、失敗の 3 つの状態があります。 var promise = new Promise((resolve,reject) => { // これは非同期操作です setTimeout(() => { // ここでデータの取得をシミュレートします var data = '取得したデータ' // データを取得したら、resolve メソッドと reject メソッドを呼び出して、promise オブジェクトの状態を変更できます。resolve(data) // resolve は promise オブジェクトの状態を success に変更でき、reject() は promise オブジェクトの状態を failure に変更できます。 }, 1000); }) Promiseのthenメソッドプロミスオブジェクトのステータスが成功または失敗の場合、thenメソッドを呼び出すことができます。 thenメソッドは2つのパラメータを受け入れ、両方のパラメータは関数型の値である。 プロミスオブジェクトが成功状態にある場合、thenメソッドの最初のパラメータが呼び出されます。 つまり、promiseオブジェクトの状態が失敗した場合、thenメソッドの2番目のパラメータが呼び出されます。 2 番目のパラメータはオプションであり、失敗をキャプチャする必要がない場合は省略できます。 パラメータには仮パラメータがあり、成功した関数は value と呼ばれ、失敗した関数は err と呼ばれます。 promise.then(値 => { // 非同期関数でresolve(data)が呼び出されると、つまりpromiseオブジェクトの状態が成功の場合、thenメソッドの最初のパラメータが呼び出されます。 console.log(value); // 'hello world' valueはresolve()メソッドによって渡されたデータです}, err => { // 非同期関数でreject(data)が呼び出されると、つまりpromiseオブジェクトの状態が失敗した場合、thenメソッドの2番目のパラメータが呼び出されます。 console.log(err); // errはreject()メソッドによって渡されたデータです}) then メソッドを呼び出した結果の戻り値は Promise オブジェクトであり、オブジェクトの状態はコールバック関数の実行結果によって決定されます。 コールバック関数で返される結果が非Promise型のプロパティの場合、ステータスは成功となり、戻り値はオブジェクトの成功値となる。 データ = promise.then((val) => { // console.log(val.result); // 非 Promise を返す // val.result を返す // Promise を返す return new Promise( (resolve, reject) => { // 解決('ok') 拒否('エラー') }) }, エラー => { コンソールログ(エラー); }) // 非 Promise を返し、ステータスは成功です。戻り値はオブジェクトの成功値です。// 返される結果は Promise オブジェクトです。オブジェクトのステータスは、コールバック関数の実行結果によって決まります。// エラーをスローし、ステータスは失敗です。console.log(data); したがって、 then はチェーンで呼び出すことができます。使用方法については、以下の promise アプリケーションの例を参照してください。 Promise catch メソッドpromiseのcatchメソッドはthen(null, rejection)の別名であり、エラーが発生したときにコールバックを指定するために使用されます。 Promiseオブジェクトの状態が解決されると、thenメソッドの指定されたコールバック関数が呼び出されます。 const promise = new Promise((resolve, deny) => { 解決('OK') }) promise.then(val => { console.log(val); // 正常 }).catch(エラー => { コンソールログ(エラー); }) promise のステータスが拒否された場合、この問題を処理するために catch メソッドのコールバック関数が呼び出されます。 const promise = new Promise((resolve, deny) => { 拒否('エラー') }) promise.then(val => { コンソールログ(val); }).catch(エラー => { console.log(err); // エラー }) thenメソッドの実行中にエラーが発生した場合は、catchメソッドによっても捕捉されます。 const promise = new Promise((resolve, deny) => { 解決('エラー') }) promise.then(val => { console.log('ok'); // 正常 「問題が発生しました!」と表示します。 ! ' // そのときスローされたエラーは引き続き catch によってキャッチされます}).catch(err => { console.log(err); // 問題が発生しました。 ! }) プロミス オブジェクトのエラーはバブリングの性質を持ち、キャッチされるまで返されます。つまり、エラーは常に次の catch によってキャッチされます。 const promise = new Promise((resolve, deny) => { 解決('OK') }) promise.then(val => { 新しい Promise を返します ((resolve, reject) => { 拒否('エラー') }) }) .then(val => { 新しい Promise を返します ((resolve, reject) => { 拒否('エラー') }) }) .catch(エラー => { // 上記で生成されたすべてのエラーは、catch console.log(err); でキャッチできます。// err }) 一般的に、then メソッドでは拒否ステータスのコールバック関数 (つまり、then の 2 番目のパラメーター) を定義せず、常に catch メソッドを使用します。 プロミスアプリファイルの読み取りを約束し、複数のファイルが連続して呼び出されます この例ではNode.jsファイルモジュールを使用します // ファイル情報を読み取る const fs = require('fs') 次のコードでは、promiseを使用して非同期関数をラップします。 まず、通常のファイル読み取り操作を見てみましょう // ファイル情報を読み取る const fs = require('fs') // 読み取りに失敗した場合、err はエラーオブジェクト、読み取りが成功した場合、data はデータです fs.readFile('./01.txt', (err, data) => { // エラーが発生したかどうかを判断します。エラーが発生した場合は、エラー オブジェクトを出力します。 もし(エラー){ コンソールログ(エラー); 戻る } コンソールにログ出力します。 }) 読み取りが成功した後もファイルの読み取りを続けたい場合は、コールバック関数で fs.readFile... を引き続き使用してファイルを読み取ります。ネスト レベルが高すぎると、コールバック ヘルが形成されます。 次にPromiseメソッドを使ってファイルを読み込みます // ファイル情報を読み取る const fs = require('fs') const promise = new Promise((resolve, deny) => { fs.readFile('./01.txt', (err, データ) => { (err) の場合は、reject(err) を返します。 解決(データ) }) }) promise.then(val => { コンソールにログ出力します。 // Promiseオブジェクトを返す return new Promise((resolve, reject) => { fs.readFile('./02.txt', (err, データ) => { (err) の場合は、reject(err) を返します。 解決(データ) }) }) }, エラー => { コンソールログ(エラー); }) // 前のthenはpromiseオブジェクトを返すので、continue.thenを実行できる .then(val => { コンソールにログ出力します。 新しい Promise を返します ((resolve, reject) => { fs.readFile('./03.txt', (err, データ) => { (err) の場合は、reject(err) を返します。 解決(データ) }) }) }, エラー => { コンソールログ(エラー); }) .then(val => { コンソールにログ出力します。 }, エラー => { コンソールログ(エラー); }) promiseはajaxリクエストをカプセル化する Ajaxリクエストをカプセル化し、それを使用して結果を取得すると、コードがより簡潔になり、コールバック地獄の問題が解決されます。 const promise = new Promise((resolve, deny) => { // オブジェクトを作成する const xhr = new XMLHttpRequest() // 初期化 xhr.open("GET", 'https://api.apiopen.top/getSongPoetry?page=1&count=20') // 送信 xhr.send() // イベント処理応答結果をバインドする xhr.onreadystatechange = function () { // 判定 // 最後の段階に入り、すべてのレスポンス本文が返されます if (xhr.readyState === 4) { // 応答コードを決定する if (xhr.status >= 200 && xhr.status < 300) { // 成功を示します // console.log(JSON.parse(xhr.response)); 解決(JSON.parse(xhr.response)) } それ以外 { 拒否(xhr.ステータス) } } } }) // コールバックを指定する promise.then((val) => { コンソールログ(val); }, エラー => { コンソールログ(エラー); }) Promise の紹介と基本的な使い方については以上です。Promise の使い方に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: ラジオボタンとチェックボックス効果の純粋な CSS 実装例
tomcat の解凍されたディレクトリを開くと、次のディレクトリ構造が表示されます。 1.Tomca...
1. mysqlにログインします。 mysql -u ルート -h 127.0.0.1 -p 2. ...
1. 依存パッケージをインストールする yum -y インストール gcc-c++ ncurses-...
知らせ! ! ! uid が (a,b,c,null) に含まれないユーザーから * を選択します。...
序文WeChat ミニプログラムのネイティブ UI が少し物足りないと感じることがあるので、サードパ...
この記事の例では、ライトスイッチ効果を実現するためのjsの具体的なコードを参考までに共有しています。...
1. ログセグメンテーションのためのLog4j 1) log4j-1.2.17.jar、tomcat...
1. Apacheをインストールする # yum インストール -y httpd httpd-de...
主キーを作成するには 2 つの方法があります。 テーブルテーブル名を作成( フィールド名タイプ、 フ...
この記事では、VMware 12でのUbuntu 16.04イメージのインストールチュートリアルを参...
目次1. スクリプトタグを使用してファイルをインポートする1. ローカルファイルをインポートする2....
序文エージェントの役割は何ですか? - 複数のドメイン名が同じサーバーに解決される- 1つのサーバー...
問題の原因: 最初は CentOS 8 のデフォルトの yum ソースを正常に使用できますが、次のコ...
1. フィルター例: <!DOCTYPE html> <html lang=&qu...
目次序文 👀リサーチを始めましょう🐱🏍オリジナル🧶 indexOf を使用した元の方法の最適化 ✍...