Ich habe ein Skript wie:javascript Promise.all letzte Versprechen gibt nur
var a = [{'a': 1},{'b': 2}]
var allPromises = new Array(a.length)
for(var i in a) {
allPromises[i] = Promise.resolve().then(response => {
console.log(i)
console.log(a[i])
// Do somethig on every loop with key and value
return i
})
}
Promise.all(allPromises).then(response => console.log(response))
Hier in meinem for loop
es gibt mir nur letzte Index und den Wert des letzten Index, während ich den Wert auf jeder Schleife und führen einige wollen Aktion mit Schlüssel und Wert .. Aber ich bekomme den letzten Schlüssel und Wert nur ..
Ich versuchte, den Wert auf Promise.all
Antwort, aber nicht funktioniert. Wie kann ich den Index meines Arrays auf die allPromises
Antwort bekommen?
Ich kann es tun, indem ich einen Zähler mache. Aber wenn ich die Funktion erneut anrufe, wird der Zähler zurückgesetzt, also möchte ich den Zähler nicht benutzen.
Gibt es sowieso ich kann Index für jede Schleife für Versprechen bekommen?
Die Verwendung von 'let' anstelle von' var' würde auch mit der Art und Weise funktionieren, wie die for-Schleife geschrieben wird, weil 'let' mit Block-Scoping funktioniert, nicht nur mit der Funktion scoping. Aber ich würde auch die Lösung von @ jfriend00 bevorzugen, da meiner Meinung nach die 'Array.map' /' Array.forEach' besser lesbar ist. –
Sie haben bereits einige gute Antworten, also brauchen Sie keine anderen :) Aber um eine weitere Option zu dem Mix hinzuzufügen: Da Sie bereits die Auflösung verwenden, können Sie 'i' hineingeben, so dass es dann der Parameter innerhalb' 'wird '(' resolve') und verwende diesen Parameter anstelle der äußeren 'i'-Variable: https: // jsfiddle.net/vscbgwpm/ –
Die Verwendung von 'var' ist hier ein typischer JS-Scoping-Hinterhalt. Sie sollten 'let' anstelle von' var' verwenden. Oder die Idee von @ Me.Name ist auch ziemlich gültig und gut. – Redu