1. Promiseとは何か
2. 基本的な使い方
const promise = new Promise(function(resolve, reject) { // ... if (/* 非同期操作が成功しました*/){ 解決(値); } それ以外 { 拒否(エラー); } });
promise.then(関数 (値){ // .... },関数(エラー){ // .... エラー }) promise.then(関数 (値){ // .... }).catch(関数(err){ // .... }) 3. Promiseメソッド3.1 Promise.prototype.then() loadData().then(関数(値){ 戻る 3 }).then(関数(数値){ console.log("ok", 数値) // 3 }) 3.2 Promise.prototype.catch() const promise = new Promise(function(resolve, reject) { throw new Error('unkonw error'); // エラー状態が -> 拒否に変更されるのをスローします }); const promise = new Promise(function(resolve, reject) { 拒否('不明なエラー') // 拒否() メソッドを使用して状態を -> 拒否に変更します }); promise.catch(関数(エラー) { コンソール.log(エラー); });
loadData().then(function(値) { loadData(値)を返します。 }).then(function(users) { }).catch(関数(err) { // 最初の 3 つの Promise からのエラーを処理します });
const promise = new Promise(function(resolve, reject) { resolve(a) // ReferenceError: a は定義されていません }); promise.then(関数(値) { console.log('値は', 値) }); setTimeout(() => { console.log('code is run') }, 1000); // コードが実行される 3.3 Promise.prototype.finally() 約束 .then(結果 => {···}) .catch(エラー => {···}) .finally(() => {···}); 3.4 Promise.all() const promise = Promise.all([p1, p2, p3]); 新しい
const promises = [1,2,3,4].map(function (id) { loadData(id) を返します。 }); Promise.all(promises).then(function (users) { // ... }).catch(関数(err){ // ... }); 3.5 Promise.race() const promise = Promise.race([p1, p2, p3]);
シナリオ 1:ユーザーがソーシャル ネットワーキング サイトのホームページにログインした後、ユーザー情報、フォロー リスト、ファン リストを取得するよう非同期的に要求します。ページをレンダリングする前に、すべてのデータ要求が成功していることを確認する必要があります。データが失敗すると、ページはリダイレクトされます。ここでは 関数 initUserHome() { Promise.all([ 新しいPromise(getMe)、 新しいPromise(getFollows)、 新しい Promise(getFans) ]) .then(関数(データ){ // ページを表示する }) .catch(関数(err){ // .... リダイレクトページ }); }; ユーザーホームを初期化します。 シナリオ 2:チケット取得ソフトウェアを作成する場合、多くのチケット販売チャネルを要求しますが、毎回最初に完了した Promise のみを返す必要があります。ここでは、 関数 getTicket() { Promise.race([ 新しいPromise(postASell)、 新しいPromise(postBSell)、 新しい Promise(postCSell) ]) .then(関数(データ){ // チケット取得成功}) .catch(関数(err){ // .... チケットの取得に失敗しました。もう一度お試しください}); }; チケットを取得します。 3.6 Promise.allSettled() const リクエスト = [ フェッチ('/url1')、 フェッチ('/url2')、 フェッチ('/url3')、 ]; 試す { Promise.all(リクエスト)を待機します。 console.log('すべてのリクエストが成功しました。'); } キャッチ { console.log('1 つのリクエストが失敗しました。他のリクエストはまだ完了していない可能性があります。'); } 場合によっては、次のステップに進む前に、非同期操作のグループが完了するまで待機する必要があります。このとき、パラメータが配列であり、配列の各メンバーが const リクエスト = [ フェッチ('/url1')、 フェッチ('/url2')、 フェッチ('/url3')、 ]; Promise.allSettled(リクエスト) を待機します。 console.log('すべてのリクエストが完了した後に実行します (成功と失敗を含む)'); 3.7 Promise.any()受信した 関数 getTicket() { プロミス.any([ 新しいPromise(postASell)、 新しいPromise(postBSell)、 新しい Promise(postCSell) ]) .then(関数(データ){ // 1 つのチケットが正常に取得されました}) .catch(関数(err){ // .... すべてのチャネルが失敗しました }); }; チケットを取得します。 3.8 Promise.resolve() 新しいPromise(resolve =>resolv(1)) 渡されたパラメータが異なります。
thenable = { 次に: 関数(解決、拒否) { 解決する(1); } };
定数promise = Promise.resolve(1); promise.then(関数 (値) { console.log(値) // 1 });
3.9 Promise.reject() const promise = Promise.reject('不明なエラー'); // 同等の const promise = new Promise((resolve, reject) => deny('unkonw error')) promise.then(null, 関数(s) { コンソール.log(複数) }); //不明なエラー 4. シンプルなシーン画像を非同期で読み込みます: 関数loadImageAsync(url) { 新しいPromise(function(resolve,reject)を返す{ 定数image = 新しいImage(); イメージをロードします。 image.onerror = 拒否; イメージのURLをコピーします。 }); } リクエストタイムアウト処理: //リクエスト関数 request(){ 新しいPromise(function(resolve,reject){を返す // コード.... 解決('リクエストOK') }) } 関数timeoutHandle(time){ 新しいPromise(function(resolve,reject){を返す setTimeout(関数(){ 拒否('タイムアウト'); }、 時間); }); } Promise.race([ リクエスト()、 タイムアウトハンドル(5000) ]) .then(res=>{ コンソール.log(res) }).catch(エラー=>{ console.log(err) // タイムアウト }) フロントエンドの 以下もご興味があるかもしれません:
|
>>: HTML フォームタグチュートリアル (5): テキストフィールドタグ
まず、インターネット上の一般的な慣行を見てみましょうデフォルトでは、プライベート ライブラリはイメー...
目次背景1. 思考分析2. ページ構成2.1 HTML レイヤー2.2 CSS レイヤー2.3 JS...
Samba サービス:このコンテンツはサンバサービス学習者の参考用ですケースの説明:企業の管理者は、...
JS で CSS 変数を使用する方法:export キーワードを使用して、js オブジェクトを le...
データベースは、どのオブジェクトにどのフィールドが含まれているかを照会します。 *を選択 sysob...
目次Linux - ファイル記述子、ファイルポインタ、インデックスノード1. Linux - ファイ...
この記事では、macOSでのMySQL 8.0.16のインストールと設定のチュートリアルを参考までに...
背景スレッド•マスタースレッドコア バックグラウンド スレッドは主に、バッファー プール データをデ...
1. スタイルオブジェクトスタイル オブジェクトは単一のスタイル宣言を表し、スタイルが適用されている...
この記事で説明する等高レイアウトでは、純粋な CSS を使用して、要素の高さを手動で設定することなく...
目次Redux Toolkitが解決する問題何が含まれていますか? Redux Toolkit AP...
SQLはテーブル内の重複レコードをすべて見つけます1. テーブルには id と name の 2 つ...
ロード バランシングは、サーバー クラスタの展開でよく使用されるデバイスです。マシンのパフォーマンス...
Django Web開発の過程で、HTMLを書く際にバックエンドから同じ名前のリスト変数が渡されるが...
CSS ファイルでは、フォント名が文字化けしていることがよくあります。これは、作成者が中国語フォン...