Węzeł.js-Using the async lib-async.foreach with object
Używam węzła async lib- https://github.com/caolan/async#forEach i chce iterację przez obiekt i wydrukować jego klucz indeksu. Po zakończeniu chciałbym wykonać callback.
Oto co mam do tej pory, ale 'iterating done'
nigdy nie widać:
async.forEach(Object.keys(dataObj), function (err, callback){
console.log('*****');
}, function() {
console.log('iterating done');
});
Dlaczego ostateczna funkcja nie zostanie wywołana?
Jak wydrukować klucz indeksu obiektu?
2 answers
Funkcja końcowa nie zostanie wywołana, ponieważ async.forEach
wymaga wywołania funkcji callback
dla każdego elementu.
Użyj czegoś takiego:
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');
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-05 21:09:39
Async.każda z nich jest bardzo użyteczną i potężną funkcją dostarczaną przez Async Lib. posiada 3 pola 1-Kolekcja / tablica 2-iteracja 3-callback zbiór odnosi się do tablicy lub zbioru obiektów, iteracja odnosi się do każdej iteracji, a wywołanie zwrotne jest opcjonalne . jeśli podajemy callback, to zwróci odpowiedź lub powie wynik, który chcesz pokazać w interfejsie
Stosuje funkcję iteratee do każdego elementu w coll, równolegle. Iteratee to wywołane z elementem z listy i wywołanie zwrotne po jej zakończeniu. Jeśli iterat przekazuje błąd do wywołania zwrotnego, główne wywołanie zwrotne (dla każdej funkcji) jest natychmiast wywołane z błędem.
Zauważ, że ponieważ ta funkcja stosuje iteratee do każdego elementu równolegle, nie ma gwarancji, że funkcje iteratee będą wypełniane w kolejności.
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);
}
});
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-23 18:32:32