この記事は、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: 'https://xxx.xxx.xxx/api/uploadImage', filePath: imageList[i], name: 'file', 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 実行処理
//顺序处理函数 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: 'https://xxx.xxx.xxx/api/uploadImage', filePath: imageList[i], name: 'file', 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 関数の役割について説明します
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()); }
関連する推奨事項:
以上がpromsie.allとpromiseの逐次実行の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

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