Ich kämpfe immer noch mit Versprechungen, mache aber dank der Community hier einige Fortschritte.
Ich habe eine einfache JS-Funktion, die eine Parse-Datenbank abfragt. Es soll das Array von Ergebnissen zurückgeben, aber aufgrund der asynchronen Natur der Abfrage (daher die Versprechen) kehrt die Funktion vor den Ergebnissen zurück und hinterlässt ein undefiniertes Array.
Was muss ich tun, damit diese Funktion auf das Ergebnis des Versprechens wartet?
Hier ist mein Code:
function resultsByName(name)
{
var Card = Parse.Object.extend("Card");
var query = new Parse.Query(Card);
query.equalTo("name", name.toString());
var resultsArray = [];
var promise = query.find({
success: function(results) {
// results is an array of Parse.Object.
console.log(results);
//resultsArray = results;
return results;
},
error: function(error) {
// error is an instance of Parse.Error.
console.log("Error");
}
});
}
javascript
parse-platform
promise
mac_55
quelle
quelle
Antworten:
Anstatt a zurückzugeben, geben
resultsArray
Sie ein Versprechen für ein Ergebnisarray und dannthen
das auf der Anrufsite zurück. Dies hat den zusätzlichen Vorteil, dass der Anrufer weiß, dass die Funktion asynchrone E / A ausführt. Die Codierung der Parallelität in JavaScript basiert darauf. Vielleicht möchten Sie diese Frage lesen , um eine umfassendere Vorstellung zu erhalten:Weitere Beispiele für die Verwendung von Analyseversprechen mit Abfragen finden Sie in Parses eigenem Blogbeitrag darüber .
quelle
Verwenden Sie
async/await
(NICHT Teil von ECMA6, aber seit Ende 2017 für Chrome, Edge, Firefox und Safari verfügbar, siehe canIuse )MDN
Aufgrund eines Kommentars hinzugefügt: Eine asynchrone Funktion gibt immer ein Versprechen zurück, und in TypeScript würde es so aussehen:
quelle
Sie möchten die Funktion nicht warten lassen, da JavaScript nicht blockierend sein soll. Geben Sie das Versprechen lieber am Ende der Funktion zurück, dann kann die aufrufende Funktion das Versprechen verwenden, um die Serverantwort zu erhalten.
quelle
success:
Bit ist aus.return query.find();
.Sie verwenden hier eigentlich keine Versprechen. Mit Parse können Sie Rückrufe oder Versprechen verwenden. deine Entscheidung.
Gehen Sie wie folgt vor, um Versprechen zu verwenden:
Um nun Dinge auszuführen, nachdem das Versprechen abgeschlossen ist, können Sie es einfach innerhalb des Versprechen-Rückrufs innerhalb des
then()
Anrufs ausführen . Bisher wäre dies genau das gleiche wie bei normalen Rückrufen.Um Versprechen wirklich gut zu nutzen, müssen Sie sie wie folgt verketten:
quelle
Parse.Object
's sein.