Heim Web-Frontend js-Tutorial Detaillierte Erläuterung der sequentiellen Ausführung von promsie.all und Promise

Detaillierte Erläuterung der sequentiellen Ausführung von promsie.all und Promise

Jan 20, 2018 am 11:50 AM
ie promise

Dieser Artikel stellt hauptsächlich die relevanten Informationen zum WeChat-Applet promsie.all und zur sequentiellen Ausführung von Versprechen vor. Ich hoffe, dass dieser Artikel allen helfen kann.

WeChat-Applet promsie.all und Promise werden nacheinander ausgeführt

Vorwort

Kürzlich Bei der Entwicklung kleiner Programme ist eine der Anforderungen, auf die ich gestoßen bin, das Einreichen von Bildern. WeChat lädt hier zuerst das Bild hoch, und der Hintergrund gibt Ihnen den Bildnamen und die Adresse zurück, und dann fügen Sie das ein Bildinformationen. Gehen Sie zur entsprechenden Position des Formulars und senden Sie das Formular ab. Hier erfahren Sie, wie Sie die Bildanforderung vor dem Hochladen des Formulars hochladen. Wenn das WeChat-Applet mehrere Bilder enthält, können Sie diese nur einzeln hochladen . Um es einfach auszudrücken: Was soll ich tun, nachdem ich das Bild hochgeladen habe (mehrere Anfragen), den Rückgabewert erhalten und dann das Formular hochgeladen habe?

2. Promise.all und Promise.race

Lassen Sie uns zunächst die Unterschiede zwischen den Methoden Promise.all und Promise.race vorstellen. Promise.all (iterierbar) Die Methode gibt ein Versprechen zurück, wenn alle Versprechen in den iterierbaren Parametern abgeschlossen wurden oder wenn das erste übergebene Versprechen (das sich auf die Ablehnung bezieht) fehlschlägt. iterable ist ein iterierbares Objekt, im Allgemeinen jedoch ein Array. Der Rückgabewert ist ebenfalls ein Promise-Objekt.

Einige Punkte müssen klargestellt werden. Promise.all führt mehrere Promise-Objekte gleichzeitig aus, und die Parameter des zurückgegebenen Promise-Objekts sind ein Array, und jedes Element im Array ist auch ein iterierbares Objekt . Die Bestellung wird zurückgegeben.

Die Promise.race(iterable)-Methode gibt ein neues Versprechen zurück. Solange der Parameter iterable ein Versprechensobjekt „resolve“ oder „reject“ enthält, wird das neue Versprechen sofort abgeschlossen (resolve)“ oder „ablehnen“ und erhalten Sie den Rückgabewert oder die Fehlerursache des vorherigen Versprechenobjekts. Solange also eines der Iterables abgeschlossen wird oder fehlschlägt, wird sofort ein Promise-Objekt zurückgegeben. Aus dem Wort „Rasse“ lässt sich auch schließen, dass der Erstankömmling sofort ein Versprechensobjekt zurückgibt.

Gemäß der obigen Definition verwenden wir die Promise.all-Methode, um unsere Bedürfnisse zu erfüllen.


//存储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数组进行处理
})
Nach dem Login kopieren

3. Probleme mit dem WeChat-Miniprogramm

Ich arbeite an der Bild-Upload-Funktion von WeChat Hier können Sie nur das Bild zuerst hochladen und dann den Bildnamen und die Adresse zurückgeben.

Hier verwenden wir die Promise.all-Methode, aber es gibt ein Problem, dass Promise.all gleichzeitig ausgeführt wird, aber das WeChat-Applet kann nur 10 gleichzeitige Anfragen stellen.

Für das Hochladen von Bildern müssen Sie möglicherweise mehr als 10 Bilder gleichzeitig hochladen, was mehr als 10 gleichzeitige Anfragen bedeutet. In diesem Fall meldet WeChat einen Fehler

„WAService.js:4 uploadFile :fail createUploadTask:fail überschreitet die maximale Anzahl an Upload-Verbindungen von 10“.

4. Sequentielle Promise-Ausführungsverarbeitung

Weil Promise.all mehrere Promsie-Objekte gleichzeitig ausführt Zeit, daher gibt es eine Begrenzung für die Anzahl solcher Parallelitäten, die jeweils nur 10 sein können. Wenn Sie diese Grenze durchbrechen möchten, können Sie jedes Versprechen nacheinander ausführen.

Der Code lautet wie folgt:


//顺序处理函数
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数组进行处理
});
Nach dem Login kopieren

1. Hier ist eine Erklärung der Funktion der sequenceTasks-Funktion

Erster recordValue Die Funktion übergibt zwei Werte, einer ist ein Ergebnisarray, der andere ist ein Wert, value ist der übergebene Wert, results.push(value); schiebt jeden Wert in das Ergebnisarray und gibt dann den zurück Ergebnisarray.


let pushValue = recordValue.bind(null, []);
Nach dem Login kopieren

pushValue ist ebenfalls ein Funktionsobjekt. Der erste Parameter wird durch null dargestellt, was den Zeiger der Funktion nicht ändert Dies bedeutet, dass pushValue eine Funktion (Wert) ist und die Parameter als Wert übergeben werden.


promise = promise.then(task).then(pushValue);
Nach dem Login kopieren

task ist eine Funktion, und die Funktion gibt ein Promise-Objekt zurück. In unserem Fall ist es die Funktion zum Hochladen von Bildern , then(pushValue), pushValue ist eine Funktion der Funktion (value). Value stellt den Rückgabewert dar, nachdem das Bild hochgeladen wurde, den Rückgabewert in das Ergebnisarray schiebt, ihn nacheinander ausführt und ihn nacheinander zum Ergebnisarray hinzufügt und kehrt schließlich zurück. Sie können ein Array von Objekten abrufen, und das Array enthält die Ergebnisse, die bei der sequentiellen Ausführung zurückgegeben werden.

2. Die for-Schleife in sequenceTasks kann auch in der folgenden Reduzierungsmethode geschrieben werden:


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());
}
Nach dem Login kopieren

Verwandte Empfehlungen:

headjs implementiert das parallele Laden von Websites, aber die sequentielle Ausführung von JS

Detaillierte Einführung in die Ausführungsergebnisse der Ladereihenfolge von Klassen in Java

Wie ist die Ausführungsreihenfolge des JS-Codes?

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der sequentiellen Ausführung von promsie.all und Promise. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Internet Explorer öffnet Edge: So stoppen Sie die MS Edge-Umleitung Internet Explorer öffnet Edge: So stoppen Sie die MS Edge-Umleitung Apr 14, 2023 pm 06:13 PM

Es ist kein Geheimnis, dass der Internet Explorer schon lange in Ungnade gefallen ist, aber mit der Einführung von Windows 11 kommt die Realität. Anstatt in Zukunft manchmal den IE zu ersetzen, ist Edge jetzt der Standardbrowser im neuesten Betriebssystem von Microsoft. Vorerst können Sie den Internet Explorer noch in Windows 11 aktivieren. Allerdings hat IE11 (die neueste Version) bereits ein offizielles Ruhestandsdatum, nämlich den 15. Juni 2022, und die Uhr tickt. Vor diesem Hintergrund ist Ihnen vielleicht aufgefallen, dass Internet Explorer manchmal Edge öffnet, und es gefällt Ihnen möglicherweise nicht. Warum passiert das also? existieren

Was soll ich tun, wenn Win11 den IE11-Browser nicht verwenden kann? (win11 kann den IE-Browser nicht verwenden) Was soll ich tun, wenn Win11 den IE11-Browser nicht verwenden kann? (win11 kann den IE-Browser nicht verwenden) Feb 10, 2024 am 10:30 AM

Immer mehr Benutzer beginnen mit der Aktualisierung des Win11-Systems. Da jeder Benutzer unterschiedliche Nutzungsgewohnheiten hat, verwenden viele Benutzer immer noch den IE11-Browser. Was soll ich also tun, wenn das Win11-System den IE-Browser nicht verwenden kann? Unterstützt Windows11 immer noch ie11? Werfen wir einen Blick auf die Lösung. Lösung des Problems, dass Win11 den ie11-Browser nicht verwenden kann 1. Klicken Sie zunächst mit der rechten Maustaste auf das Startmenü und wählen Sie „Eingabeaufforderung (Administrator)“, um es zu öffnen. 2. Geben Sie nach dem Öffnen direkt „Netshwinsockreset“ ein und drücken Sie zur Bestätigung die Eingabetaste. 3. Geben Sie nach der Bestätigung „netshadvfirewallreset&rdqu“ ein

Halten Sie Ihr Wort: Die Vor- und Nachteile der Einhaltung Ihrer Versprechen Halten Sie Ihr Wort: Die Vor- und Nachteile der Einhaltung Ihrer Versprechen Feb 18, 2024 pm 08:06 PM

Im täglichen Leben stoßen wir oft auf Probleme zwischen Versprechen und Erfüllung. Ob in einer persönlichen Beziehung oder einer Geschäftstransaktion: Das Einhalten von Versprechen ist der Schlüssel zum Aufbau von Vertrauen. Allerdings sind die Vor- und Nachteile eines Engagements oft umstritten. In diesem Artikel werden die Vor- und Nachteile von Verpflichtungen untersucht und einige Ratschläge gegeben, wie Sie Ihr Wort halten können. Die versprochenen Vorteile liegen auf der Hand. Erstens schafft Engagement Vertrauen. Wenn jemand sein Wort hält, lässt er andere glauben, dass er eine vertrauenswürdige Person ist. Vertrauen ist die Bindung zwischen Menschen, die Menschen mehr machen kann

Was soll ich tun, wenn in einer Vue-Anwendung ein nicht erfasster (versprechender) TypeError auftritt? Was soll ich tun, wenn in einer Vue-Anwendung ein nicht erfasster (versprechender) TypeError auftritt? Jun 25, 2023 pm 06:39 PM

Vue ist ein beliebtes Front-End-Framework, und bei der Entwicklung von Anwendungen treten häufig verschiedene Fehler und Probleme auf. Unter diesen ist Uncaught(inpromise)TypeError ein häufiger Fehlertyp. In diesem Artikel werden wir die Ursachen und Lösungen diskutieren. Was ist Uncaught(inpromise)TypeError? Der Fehler Uncaught(inpromise)TypeError tritt normalerweise auf

Erfahren Sie mehr über Promise.resolve() Erfahren Sie mehr über Promise.resolve() Feb 18, 2024 pm 07:13 PM

Eine detaillierte Erklärung von Promise.resolve() erfordert spezifische Codebeispiele. Promise ist ein Mechanismus in JavaScript zur Verarbeitung asynchroner Vorgänge. In der tatsächlichen Entwicklung ist es häufig erforderlich, einige asynchrone Aufgaben zu verarbeiten, die nacheinander ausgeführt werden müssen, und die Methode Promise.resolve () wird verwendet, um ein erfülltes Promise-Objekt zurückzugeben. Promise.resolve() ist eine statische Methode der Promise-Klasse, die a akzeptiert

So brechen Sie den automatischen Sprung zu Edge ab, wenn Sie den IE in Win10_Solution öffnen, um zum automatischen Sprung der IE-Browserseite zu gelangen So brechen Sie den automatischen Sprung zu Edge ab, wenn Sie den IE in Win10_Solution öffnen, um zum automatischen Sprung der IE-Browserseite zu gelangen Mar 20, 2024 pm 09:21 PM

In letzter Zeit haben viele Win10-Benutzer festgestellt, dass ihr IE-Browser bei der Verwendung von Computerbrowsern immer automatisch zum Edge-Browser springt. Wie kann man also den automatischen Sprung zum Edge beim Öffnen des IE in Win10 deaktivieren? Lassen Sie diese Website den Benutzern sorgfältig vorstellen, wie sie beim Öffnen des IE in Win10 automatisch zum Rand springen und schließen. 1. Wir melden uns beim Edge-Browser an, klicken auf ... in der oberen rechten Ecke und suchen nach der Dropdown-Einstellungsoption. 2. Nachdem wir die Einstellungen eingegeben haben, klicken Sie in der linken Spalte auf Standardbrowser. 3. Abschließend aktivieren wir in der Kompatibilität das Kontrollkästchen, um ein erneutes Laden der Website im IE-Modus zu verhindern, und starten den IE-Browser neu.

Das Ende einer Ära: Internet Explorer 11 ist im Ruhestand, hier ist, was Sie wissen müssen Das Ende einer Ära: Internet Explorer 11 ist im Ruhestand, hier ist, was Sie wissen müssen Apr 20, 2023 pm 06:52 PM

Der 15. Juni 2022 ist der Tag, an dem Microsoft den Support für Internet Explorer 11 (IE11) beendet und sein Kapitel über Legacy-Browser abschließt. Das Unternehmen erinnert Nutzer bereits seit Längerem an dieses End-of-Life-Datum und fordert sie dazu auf, einen Umstieg auf Microsoft Edge zu planen. Microsoft bündelt IE11 mit Windows 8.1 als modernen Standard-Webbrowser für Windows. Obwohl er nie die (aktuellen) Höhen von Chrome erreichte, war er 2014 nach IE8 der am zweithäufigsten verwendete Desktop-Browser. Natürlich mit 20

So lösen Sie das Problem, dass die IE-Verknüpfung nicht gelöscht werden kann So lösen Sie das Problem, dass die IE-Verknüpfung nicht gelöscht werden kann Jan 29, 2024 pm 04:48 PM

Lösungen für IE-Verknüpfungen, die nicht gelöscht werden können: 1. Berechtigungsprobleme; 3. Softwarekonflikte; 6. IE-Probleme; 9. Überprüfen Sie den Zielpfad der Verknüpfung. 10. Berücksichtigen Sie andere Faktoren. 11. Wenden Sie sich an Fachleute. Detaillierte Einführung: ​1. Klicken Sie mit der rechten Maustaste auf die Verknüpfung, wählen Sie „Eigenschaften“ und stellen Sie sicher, dass Sie über ausreichende Berechtigungen zum Löschen der Verknüpfung verfügen. Wenn nicht, können Sie versuchen, die Verknüpfung auszuführen usw .

See all articles