J'ai encore du mal avec les promesses, mais je fais des progrès grâce à la communauté ici.
J'ai une fonction JS simple qui interroge une base de données Parse. Il est censé renvoyer le tableau des résultats, mais évidemment en raison de la nature asynchrone de la requête (d'où les promesses), la fonction retourne avant les résultats, me laissant avec un tableau non défini.
Que dois-je faire pour que cette fonction attende le résultat de la promesse?
Voici mon 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
la source
la source
Réponses:
Au lieu de renvoyer un,
resultsArray
vous renvoyez une promesse pour un tableau de résultats, puisthen
sur le site d'appel - cela présente l'avantage supplémentaire de savoir que l'appelant sait que la fonction effectue des E / S asynchrones. Le codage de la concurrence en JavaScript est basé sur cela - vous voudrez peut-être lire cette question pour avoir une idée plus large:Vous pouvez voir plus d'exemples d'utilisation de promesses d'analyse avec des requêtes dans le propre blog de Parse à ce sujet .
la source
Utiliser
async/await
(NE FAIT PAS partie d'ECMA6, mais disponible pour Chrome, Edge, Firefox et Safari depuis fin 2017, voir canIuse )MDN
Ajouté en raison d'un commentaire: une fonction asynchrone renvoie toujours une promesse, et dans TypeScript, cela ressemblerait à:
la source
Vous ne voulez pas faire attendre la fonction, car JavaScript est destiné à être non bloquant. Renvoyez plutôt la promesse à la fin de la fonction, puis la fonction appelante peut utiliser la promesse pour obtenir la réponse du serveur.
la source
success:
bit est désactivé.return query.find();
.Vous n'utilisez pas réellement de promesses ici. Parse vous permet d'utiliser des rappels ou des promesses; votre choix.
Pour utiliser les promesses, procédez comme suit:
Maintenant, pour exécuter des choses une fois la promesse terminée, vous pouvez simplement l'exécuter dans le rappel de promesse à l'intérieur de l'
then()
appel. Jusqu'à présent, ce serait exactement la même chose que les rappels réguliers.Pour faire bon usage des promesses, c'est quand vous les enchaînez, comme ceci:
la source
Parse.Object
's.