Comment passer des paramètres à la requête mysql callback dans nodejs
Je suis à essayer de comprendre la bonne façon de transmettre des données personnalisées à un appel de requête pour être mis à disposition dans le rappel.
Je suis de l'utilisation de MySQL bibliothèque en nodejs (toutes versions récentes).
J'ai un appel à la connexion.requête(sql, function(err, result) {...});
Je ne pouvais pas trouver un moyen d'1) laissez-passer de données personnalisé/paramètre à l'appel de sorte que 2) il peut être rendu disponible lorsque la fonction de rappel est appelée.
Alors, quelle est la bonne façon de le faire?
J'ai le texte suivant (pseudo-code):
...
for (ix in SomeJSONArray) {
sql = "SELECT (1) FROM someTable WHERE someColumn = " + SomeJSONArray[ix].id;
connection.query(sql, function (err, result) {
...
var y = SomeJSONArray[ix].id;
};
}
Du code ci-dessus, j'ai besoin d'être en mesure de passer à la valeur actuelle de "ix" utilisé dans la requête à la fonction de rappel lui-même.
Comment dois-je faire?
source d'informationauteur Julio
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide d'un noeud-mysql, faire comme les docs disent:
Les docs ont aussi un code de bonne échapper de chaînes, mais à l'aide de la matrice de dans la requête d'appel automatiquement à l'échappement pour vous.
https://github.com/felixge/node-mysql
Pour répondre à la question initiale, avec une réponse complète/exemple pour illustrer, envelopper le rappel avec une fonction anonyme qui crée immédiatement un champ contenant un "instantané" si vous voulez des données passées.
Pour ceux qui sont nouveaux à ce concept que j'étais à 20 minutes à peine, le dernier })(ix)); à l'extérieur var ix=1, la valeur qui est passée en (fonction(ix){. Ce pourrait être renommé (function(abc){ si vous avez changé la console.log("ix="+abc);
fwiw (Merci à Chris pour le lien qui rempli les blancs d'arriver à une solution)
Alors qu'il est OK pour passer des variables ou des objets dans une requête mysql fonction de rappel à l'aide de la tactique décrite plus haut -- habillage de la fonction de rappel dans une fonction anonyme -- je pense que c'est en grande partie inutile, et je vais vous expliquer pourquoi avec un exemple:
Produit la sortie suivante:
La crainte est que le deuxième appel à run_query() va remplacer la variable y et/ou y1 avant le premier appel à run_query() a une chance d'invoquer sa fonction de rappel. Cependant, les variables dans chaque instance de l'appelé run_query() la fonction sont effectivement isolés les uns des autres, de sauver la journée.