J'utilise le node async lib - https://github.com/caolan/async#forEach et souhaite parcourir un objet et imprimer sa clé d'index. Une fois terminé, je voudrais exécuter un rappel.
Voici ce que j'ai jusqu'à présent mais le 'iterating done'
n'est jamais vu:
async.forEach(Object.keys(dataObj), function (err, callback){
console.log('*****');
}, function() {
console.log('iterating done');
});
Pourquoi la fonction finale n'est-elle pas appelée?
Comment puis-je imprimer la clé d'index d'objet?
La fonction finale n'est pas appelée car async.forEach
requiert que vous appeliez la fonction callback
pour chaque élément.
Utilisez quelque chose comme ceci:
async.forEach(Object.keys(dataObj), function (item, callback){
console.log(item); // print the key
// tell async that that particular element of the iterator is done
callback();
}, function(err) {
console.log('iterating done');
});
async.each est une fonction très utile et puissante qui est fournie par Async Libération. Elle a 3 champs 1-collection/array 2-itération 3-callback ou une collection d'objets et une itération est référée à chaque itération et le rappel est facultatif . si nous donnons un rappel, il retournera la réponse ou le résultat que vous voulez montrer dans l'interface
Applique la fonction iteratee à chaque élément en coll, en parallèle. L'itéré est appelé avec un élément de la liste et un rappel pour le moment où il est terminé. Si l'itéré transmet une erreur à son rappel, le rappel principal (pour chaque fonction) est immédiatement appelé avec l'erreur.
Notez que, puisque cette fonction applique iteratee à chaque élément en parallèle, il n’est pas garanti que les fonctions iteratee se termineront dans l’ordre.
exapmle-
var updateEventCredit = function ( userId, amount ,callback) {
async.each(userId, function(id, next) {
var incentiveData = new domain.incentive({
user_id:userId,
userName: id.userName,
amount: id.totalJeeneePrice,
description: id.description,
schemeType:id.schemeType
});
incentiveData.save(function (err, result) {
if (err) {
next(err);
} else {
domain.Events.findOneAndUpdate({
user_id: id.ids
}, {
$inc: {
eventsCredit: id.totalJeeneePrice
}
},{new:true}, function (err, result) {
if (err) {
Logger.info("Update status", err)
next(err);
} else {
Logger.info("Update status", result)
sendContributionNotification(id.ids,id.totalJeeneePrice);
next(null,null);
}
});
}
});