Est-ce que quelqu'un peut me désigner ou expliquer un type de modèle de conception basé sur un événement qui gère la situation d'attente de deux événements pour effectuer une action?
J'ai un modèle qui est chargé async et un appel de base de données qui se passe également en même temps. J'ai une réponse qui doit être exécutée uniquement lorsque ces deux tâches sont terminées.
La seule solution que je peux trouver est de faire quelque chose de moche, comme mettre en booléens qui sont définis sur la fin de l'événement et vérifier ensuite s'ils sont tous vrais. Y a-t-il une meilleure manière de faire cela?Gestion asynchrone des événements d'un nœud JS
Répondre
Il n'y a pas de moyen simple de le faire vraiment, mais il y a beaucoup de flow control libraries qui traitent ce genre de chose. La méthode la plus simple consiste à conserver un compteur global qui s'incrémente lorsque vous lancez un appel asynchrone, puis décrémente dans le rappel lorsqu'il se termine. Chaque opération peut vérifier le compteur quand il se termine, et si le zéro est déclenché, la réponse dépend de l'achèvement des deux.
J'aime l'idée de contre. Si simple. Je vous remercie. – Prospero
Juste pour ajouter un exemple de l'un de Chris Réponse:
En utilisant async, https://github.com/caolan/async
async.parallel([
function(callback){
// query a database, lets say mongodb/mongoose
User.findOne({email: email}, function(err, user){
callback(err, user);
});
},
function(callback){
// Load a template from disk
fs.readFile('views/user.html', function (err, data) {
callback(err, data)
});
}
], function(err, results){
// Should have [user, template data]
});
Ou avec des compteurs:
var user = false,
template = false,
count = 2;
function build_user_view(){
// user, template should be available
}
User.findOne({email: email}, function(err, userDoc){
user = userDoc;
--count || build_user_view();
});
fs.readFile('views/user.html', function (err, data) {
template = data;
--count || build_user_view();
});
D'excellents exemples - merci –
- 1. Gestion des événements Select2 avec Angular js
- 2. Gestion des événements JS à partir des widgets SoundCloud
- 3. Treeview Gestion des événements ASP.Net
- 4. Gestion des événements filetés (C#)
- 5. Gestion des erreurs d'administration asynchrone
- 6. Gestion des événements Flex
- 7. javascript gestion des événements
- 8. Gestion des événements onclick
- 9. LuaInterface gestion des événements
- 10. javascript gestion des événements
- 11. Gestion des événements iPhone
- 12. Gestion des événements Android
- 13. Gestion des événements pygame
- 14. javascript gestion des événements
- 15. Gestion des événements Silverlight
- 16. javascript gestion des événements
- 17. ActionListener Gestion des événements
- 18. Gestion des événements d'objets dans les collections
- 19. nœud asynchrone interrogation et traitement des résultats
- 20. Gestion des événements dans SPWebPartManager
- 21. Gestion des événements clés J2ME
- 22. Idées de gestion des événements
- 23. Gestion des événements multiples GWT
- 24. gestion des événements iron python
- 25. Gestion des événements avec PowerShell?
- 26. Flash: Distribution/gestion des événements
- 27. Gestion des événements souris SWTChart
- 28. Gestion des événements dans MVVM
- 29. Gestion des événements inter-navigateurs
- 30. Powershell 2 gestion des événements
Il semble qu'ils ne devraient pas être parallèles événements asynchrones alors à moins que je manque quelque chose. Je voudrais juste faire event1 -> event1 callback -> event2 -> event2 callback -> insertion de base de données –
Il s'agit d'une réponse à une demande .... analyser le template-> rendre la page <- interroger la base de données .... Je sais que est un peu trivial parce que l'analyse sera toujours plus rapide mais c'est une question d'apprentissage. – Prospero