betrachten diesen CodeNodeJS - pass globale Variable Rückruf versprechen, in Parse
for (var i = 0; i < data.length; i++){
query.equalTo("objectId",data[i].id).first().then(
function(object){
object.set("username", data[i].username);
object.save();
}
);
}
in diesem Beispiel data[i]
innerhalb der then callback
ist das letzte Element des Arrays
dieses zweite Beispiel betrachten, die normalerweise in JavaScript arbeiten Welt
übernehmen wir eine API verwenden, die MongoDB verbinden und hat Funktion namens Update
for (var i = 0; i < data.length; i++){
query.eq("_id",data[i].id).update(data[i].username);
}
eq
gibt das Objekt zurück, update
aktualisiert dieses Objekt und speichert es.
wird es nicht fantastisch, wenn so etwas wie dies möglich ist, ... (nicht sicher, ob es auch noch funktioniert)
for (var i = 0; i < data.length; i++){
query.equalTo("objectId",data[i].id).first().then(
function(object, data[i]){
object.set("username", data.username);
object.save();
}
);
}
In Javascript zu verwenden Alle mit var deklarierten Variablen sind Funktionsbereiche. Dieses Problem tritt auf, weil Liniendaten [i] .Benutzername asynchron ausgeführt werden und diese Zeit sich auf den letzten (oder einen anderen) Datenindex bezieht. Um dieses Szenario zu überwinden wir Closure verwenden, wie erklärt @Tomas –
@JitendraKhatri @Tomas ich denke, das wird nicht, weil in Parse arbeiten wir können nicht die Variable auf den 'dann passieren callback' ... verwendet Tomas das zweite Beispiel, die vorgeschlagen als eine Lösung, 'dann (function (Token, Daten [i] {...}' aber Anwendungen analysieren 'dann (function (Token) {...}' – Eltorrooo
Ja, kann ich das Problem sehen - ich bearbeitet gerade ohne weiteres die zweite Codeschnipsel, die Sie angegeben haben - was nicht korrekt ist. Ich bearbeite die Antwort –