Faire mongoose.js les requêtes s'exécutent de manière synchrone
J'ai deux mangouste collections. La première stocke une liste des lieux, la deuxième est visites des lieux. Mon nœud code passe par et des tentatives pour obtenir la liste des visites à chaque lieu et de construire une chaîne que j'ai sortie JSON. La première requête est terminée avant la seconde démarre jamais existe - il un moyen de les faire exécuter de manière synchrone?
Pourquoi ne pas commencer la deuxième requête une fois que la première est terminée si l'ordre des questions (même si je ne comprends pas pourquoi l'ordre des questions aussi longtemps que votre JSON code du bâtiment attend d'eux à la fois?)
OriginalL'auteur AlexKinsella | 2013-06-19
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez node.js alors u doit utiliser https://github.com/caolan/async
lorsque vous devez récupérer des données à partir de plusieurs collections vous avez de la chaîne de vos requêtes à plusieurs reprises.
Il fera de votre code complexe et difficile à lire, et pas de la modularité. Utiliser asynchrone à créer
la modularité à l'aide de mongodb et node.js
Exemple de Code à partir de mon projet :
OriginalL'auteur Harpreet Singh
Il n'est pas native api synchrones pour mongodb/mangouste requêtes (et le votre n'en voulez pas, dans la pratique). Comme WiredPrarie mentionne, vous devriez chaîne de requêtes, avec le deuxième à partir de la première est terminée et l'exécution d'un rappel. Voici un exemple:
There is no native synchronous api for mongodb/mongoose queries
Mauvaise nouvelle pour moi, j'ai essayé de m'auto-incrémentés de travail comme dans les mongodb exemple ici: docs.mongodb.org/manual/tutorial/... mais legetNextSequence
ne peut pas être asynchrone, car il doit retourner un nombre. En essayant d'appliquer cette auto incrément dans la mangouste, mais de trouver une façon de l'exécution d'une fonction synchrone: stackoverflow.com/questions/28357965/mongoose-auto-incrementJe ne suis pas d'accord avec le "(et le votre n'en voulez pas, dans la pratique)" commentaire. C'est pour chaque développeur d'avoir à ses propres besoins. Par exemple. faire le Débogage dans le Nœud REPL console, il serait beaucoup plus facile d'attribuer des résultats ligne par ligne. Je peut aller pour un petit plugin pour faire cela, alors.
OriginalL'auteur mr.freeze
Si vous utilisez le Nœud 8.x vous pouvez utiliser async/await: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
attendent opérateur suspend l'exécution de la fonction async jusqu'à ce que la Promesse est résolu et retourne la valeur. De cette façon, votre code est plus synchrone:
Requêtes seront exécutées successivement.
Gardez à l'esprit que vous avez encore de gérer les erreurs, ils seront jetés comme des exceptions.
mais il est utilisé seulement à l'intérieur d'une fonction async !
OriginalL'auteur vsenko
Ces jours-mangouste prend en charge des promesses, de sorte que vous pouvez
.then()
vos requêtes. Par exemple:Sinon, maintenant que Javascript a async-attendent, vous pouvez l'utiliser, ce qui permettra d'économiser quelques lignes, et les aplatir un peu le code:
OriginalL'auteur joeytwiddle
À synchroniser, j'ai utilisé es6-promesse.
et j'ai eu JSON comme suit.
OriginalL'auteur Kohei Sugimura
Voici une autre méthode pour faire des pseudo-synchrone des demandes à l'aide MongooseJS. L'idée ici est de créer une file d'attente de requêtes qui doivent être exécutés. Puis créer une fonction qui est appelée récursivement jusqu'à ce que la file d'attente est épuisé. Une fois la file d'attente est épuisé, la récursion s'arrête et une réponse envoyée pour la demande initiale. Je suis à l'aide de Voies Express, donc tout ce code est encapsulé dans mon gestionnaire d'itinéraire. Dans ce cas, un HTTP POST.
OriginalL'auteur Jeffrey A. Gochin
Voici ce que j'ai fait ce soir.
La
work
méthode est tout juste de retour d'une promesse.OriginalL'auteur Proximo