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');
    });  
  1. Dlaczego ostateczna funkcja nie zostanie wywołana?

  2. Jak wydrukować klucz indeksu obiektu?

Author: DLeh, 2012-04-30

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');
});  
 122
Author: stewe,
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);       
                    }
                });
        }
    });
 0
Author: Shashwat Gupta,
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