ホームページ ウェブフロントエンド jsチュートリアル promsie.allとpromiseの逐次実行の詳細説明

promsie.allとpromiseの逐次実行の詳細説明

Jan 20, 2018 am 11:50 AM
ie promise

この記事は、WeChat アプレット promsie.all とプロミスの逐次実行に関する関連情報を主に紹介します。この記事が、困っている皆さんの参考になれば幸いです。

WeChat ミニ プログラム promsie.all と Promise は順番に実行されます

1. はじめに

最近、私はミニ プログラムを開発していますが、私が遭遇した要件の 1 つは、フォームの送信です。ここで WeChat が行うことは、まず画像をアップロードすることです。次に、画像の名前とアドレスが返されます。次に、画像情報をフォームの対応する位置に挿入して、フォームを送信します。フォームをアップロードする前に画像リクエストを行ってください。WeChat ミニ プログラムに複数の写真がある場合は、1 枚ずつしかアップロードできません。簡単に言うと、画像をアップロード(複数リクエスト)した後、戻り値を取得してからフォームをアップロードするにはどうすればよいでしょうか?

2. Promise.all と Promise.race

まず、Promise.all メソッドと Promise.race メソッドの違いを紹介します。または、最初に渡された Promise (拒否を参照) が失敗した場合、Promise が返されます。 iterable は反復可能なオブジェクトですが、通常は配列です。戻り値も Promise オブジェクトです。

Promise.all は複数の Promise オブジェクトを同時に実行し、返される Promise オブジェクトのパラメーターは配列であり、配列内の項目も反復可能なオブジェクトの順序で返されます。実行されました。

Promise.race(iterable) メソッドは新しい Promise を返します。パラメータ iterable に Promise オブジェクト「resolve」または「reject」がある限り、新しい Promise はすぐに「resolve」または「Reject」され、前の Promise オブジェクトの戻り値またはエラー理由。したがって、反復可能オブジェクトの 1 つが完了するか失敗する限り、Promise オブジェクトがすぐに返されます。レースという言葉によれば、最初に到着した人がすぐに Promise オブジェクトを返すと結論付けることもできます。

上記の定義に従って、Promise.all メソッドを使用してニーズを満たします。


//存储promise对象的数组
let promiseArr = [];
//图片地址数组
let imageList = [];
//将图片地址的上传的promise对象加入到promiseArr
for (let i = 0; i < imageList.length; i++) {
  let promise = new Promise((resolve, reject) => {
    //微信图片上传
    wx.uploadFile({
      url: &#39;https://xxx.xxx.xxx/api/uploadImage&#39;,
      filePath: imageList[i],
      name: &#39;file&#39;,
      success: function(res) {
        //可以对res进行处理,然后resolve返回
        resolve(res);
      },
      fail: function (error) {
        reject(error);
      },
      complete: function (res) {
      },
    })
  });
  promiseArr.push(promise)
}
//Promise.all处理promiseArr数组中的每一个promise对象
Promise.all(promiseArr).then((result) => {
  //对返回的result数组进行处理
})
ログイン後にコピー

3. WeChat ミニ プログラムの問題点

WeChat ミニ プログラムの画像アップロード機能に取り組んでいるとき、最初に画像をアップロードしてから画像の名前とアドレスを返すことしかできません。応答。

ここでは、promise.all メソッドを使用していますが、問題があります。Promise.all は同時に実行されますが、WeChat アプレットは一度に 10 件の同時リクエストしか実行できません。

画像のアップロードの場合、一度に 10 個を超える画像をアップロードする必要がある場合があります。つまり、一度に 10 個を超える同時リクエストが行われることになり、WeChat はエラー

「WAService.js:4 UploadFile:」を報告します。 createUploadTask に失敗しました:最大アップロード接続数 10 を超えました。」

4. 順次 Promise 実行処理

Promise.all は複数の promsie オブジェクトを同時に実行するため、同時に実行できる Mini プログラムの数には制限があります。したがって、この制限を突破したい場合は、各 Promise を順番に実行できます。


コードは次のとおりです:


//顺序处理函数
function sequenceTasks(tasks) {
  //记录返回值
  function recordValue(results, value) {
    results.push(value);
    return results;
  }
  let pushValue = recordValue.bind(null, []);
  let promise = Promise.resolve();
  // 处理tasks数组中的每个函数对象
  for (let i = 0; i < tasks.length; i++) {
    let task = tasks[i];
    promise = promise.then(task).then(pushValue);
  }
  return promise;
}

//函数数组,每个函数的返回值是一个promise对象
let promiseFuncArr = [];
//图片地址数组
let imageList = [];
//将图片地址的上传的函数加入到promiseFuncArr数组中
for (let i = 0; i < imageList.length; i++) {
  let promiseTemp = function(){
    return new Promise((resolve, reject) => {
      //微信图片上传
      wx.uploadFile({
        url: &#39;https://xxx.xxx.xxx/api/uploadImage&#39;,
        filePath: imageList[i],
        name: &#39;file&#39;,
        success: function(res) {
          //可以对res进行处理,然后resolve返回
          resolve(res);
        },
        fail: function (error) {
          reject(error);
        },
        complete: function (res) {
        },
      })
    });
  };
  promiseFuncArr.push(promiseTemp)
}

sequenceTasks(promiseFuncArr).then((result) => {
  //对返回的result数组进行处理
});
ログイン後にコピー

1 ここでは、sequenceTasks 関数の役割について説明します


まず、recordValue 関数は 2 つの値を渡します。1 つは返された結果の配列で、もう 1 つは返された結果の配列です。もう 1 つは value で、value に渡されます。results.push(value); それぞれの値を結果配列にプッシュし、結果配列を返します。

let pushValue = recordValue.bind(null, []);
ログイン後にコピー

pushValue も関数オブジェクトです。 RecordValue を [ ] 配列にバインドします。最初のパラメーターは null として渡されるため、pushValue は関数 (値) 関数です。パラメータを渡します。

promise = promise.then(task).then(pushValue);
ログイン後にコピー

タスクは関数であり、この関数はpromiseオブジェクトを返します。この場合、それは画像アップロード関数です。then(pushValue)、pushValueは関数(value)です。 )、value は画像がアップロードされた後の戻り値を表します。pushValue は戻り値を結果配列にプッシュし、順番に実行し、結果配列に順番に追加して、最後に戻ります。オブジェクトの配列を取得でき、その配列には順次実行によって返された結果が含まれます。

2. sequenceTasks の for ループは、次の Reduce メソッドで記述することもできます:


function sequenceTasks(tasks) {
  //记录返回值
  function recordValue(results, value) {
    results.push(value);
    return results;
  }
  let pushValue = recordValue.bind(null, []);
  return tasks.reduce(function (promise, task) {
    return promise.then(task).then(pushValue);
  }, Promise.resolve());
}
ログイン後にコピー

関連する推奨事項:


headjs は Web サイトの並列読み込みを実装しますが、JS の逐次実行を実装します

Java ロードシーケンスの実行結果を詳しく紹介

JSコードの実行シーケンスとは

以上がpromsie.allとpromiseの逐次実行の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Internet Explorer で Edge が開く: MS Edge リダイレクトを停止する方法 Internet Explorer で Edge が開く: MS Edge リダイレクトを停止する方法 Apr 14, 2023 pm 06:13 PM

Internet Explorer が長い間人気がなくなってきたことは周知の事実ですが、Windows 11 の登場により現実が始まりました。 Edge は、将来的に IE を置き換えるのではなく、現在 Microsoft の最新オペレーティング システムのデフォルトのブラウザーとなっています。現時点では、引き続き Windows 11 で Internet Explorer を有効にすることができます。ただし、IE11 (最新バージョン) の正式な廃止日は 2022 年 6 月 15 日であり、時間は刻々と過ぎています。これを念頭に置くと、Internet Explorer が Edge を開くことがありますが、それが気に入らないことに気づいたかもしれません。では、なぜこのようなことが起こっているのでしょうか?存在する

win11でie11ブラウザが使えない場合はどうすればいいですか? (win11ではIEブラウザは使用できません) win11でie11ブラウザが使えない場合はどうすればいいですか? (win11ではIEブラウザは使用できません) Feb 10, 2024 am 10:30 AM

ますます多くのユーザーが win11 システムにアップグレードし始めています。各ユーザーの使用習慣が異なるため、多くのユーザーは依然として ie11 ブラウザーを使用しています。では、win11 システムで ie ブラウザーを使用できない場合はどうすればよいでしょうか? Windows11はIE11をまだサポートしていますか?解決策を見てみましょう。 win11でie11ブラウザが使えない問題の解決策 1. まず、スタートメニューを右クリックし、「コマンドプロンプト(管理者)」を選択して開きます。 2. 開いたら、「Netshwinsockreset」と直接入力し、Enter キーを押して確定します。 3. 確認後、「netshadvfirewallreset&rdqu」と入力します。

約束を守る: 約束を守ることの長所と短所 約束を守る: 約束を守ることの長所と短所 Feb 18, 2024 pm 08:06 PM

日常生活では、約束と履行の間で問題に遭遇することがよくあります。個人的な関係でもビジネス取引でも、約束を守ることが信頼を築く鍵となります。ただし、コミットメントの是非についてはしばしば議論の余地があります。この記事では、約束の長所と短所を検討し、約束を守る方法についていくつかのアドバイスを提供します。約束されたメリットは明らかです。まず、コミットメントは信頼を築きます。人が約束を守るとき、その人は信頼できる人であると他人に信じ込ませます。信頼は人々の間に確立される絆であり、それは人々をより良くすることができます

Vue アプリケーションで Uncaught (in Promise) TypeError が発生した場合はどうすればよいですか? Vue アプリケーションで Uncaught (in Promise) TypeError が発生した場合はどうすればよいですか? Jun 25, 2023 pm 06:39 PM

Vue は人気のあるフロントエンド フレームワークであり、アプリケーションを開発するときにさまざまなエラーや問題に遭遇することがよくあります。このうち、Uncaught(inpromise)TypeError は一般的なエラー タイプです。この記事では、その原因と解決策について説明します。 Uncaught(inpromise)TypeError とは何ですか? Uncaught(inpromise)TypeError エラーは通常、次の場所に表示されます。

Promise.resolve() について詳しく見る Promise.resolve() について詳しく見る Feb 18, 2024 pm 07:13 PM

Promise.resolve() の詳細な説明には、特定のコード例が必要です。Promise は、非同期操作を処理するための JavaScript のメカニズムです。実際の開発では、順番に実行する必要があるいくつかの非同期タスクを処理する必要があることがよくあり、満たされた Promise オブジェクトを返すために Promise.resolve() メソッドが使用されます。 Promise.resolve() は Promise クラスの静的メソッドであり、

Win10でIEを開いた時のEdgeへの自動ジャンプを解除する方法_IEブラウザページの自動ジャンプの解決方法 Win10でIEを開いた時のEdgeへの自動ジャンプを解除する方法_IEブラウザページの自動ジャンプの解決方法 Mar 20, 2024 pm 09:21 PM

最近、多くの win10 ユーザーが、コンピューターのブラウザーを使用するときに、IE ブラウザーが常に自動的にエッジ ブラウザーにジャンプすることに気付きました。このサイトでは、win10でIEを開いたときに自動的にエッジにジャンプして閉じる方法をユーザーに丁寧に紹介しましょう。 1. Edge ブラウザにログインし、右上隅にある [...] をクリックして、ドロップダウン設定オプションを探します。 2. 設定を入力したら、左側の列の「デフォルトのブラウザ」をクリックします。 3. 最後に、互換性で、Web サイトが IE モードで再ロードされないようにチェックボックスをオンにし、IE ブラウザを再起動します。

時代の終わり: Internet Explorer 11 は廃止されました。知っておくべきことは次のとおりです。 時代の終わり: Internet Explorer 11 は廃止されました。知っておくべきことは次のとおりです。 Apr 20, 2023 pm 06:52 PM

2022 年 6 月 15 日は、Microsoft が Internet Explorer 11 (IE11) のサポートを終了し、レガシー ブラウザーの章を閉じる日です。同社はしばらくの間、このサポート終了日をユーザーに通知し、Microsoft Edge への移行を計画するよう呼び掛けてきました。 Microsoft は、Windows の最新のデフォルト Web ブラウザとして IE11 を Windows 8.1 にバンドルしています。 Chrome の(現在の)高さには決して達しませんでしたが、2014 年には IE8 に次いで 2 番目に使用されたデスクトップ ブラウザーでした。もちろん20個でも

IEのショートカットが削除できない問題の解決方法 IEのショートカットが削除できない問題の解決方法 Jan 29, 2024 pm 04:48 PM

削除できない IE ショートカットの解決策: 1. 権限の問題、2. ショートカットの破損、3. ソフトウェアの競合、4. レジストリの問題、5. 悪意のあるソフトウェア、6. システムの問題、7. IE の再インストール、8. サードパーティの使用ツール; 9. ショートカットのターゲット パスを確認する; 10. 他の要素を考慮する; 11. 専門家に相談する。詳細な紹介: 1. 権限の問題、ショートカットを右クリックし、[セキュリティ] タブで [プロパティ] を選択し、ショートカットを削除するための十分な権限があることを確認してください。ない場合は、管理者として実行するなどしてみてください。

See all articles