简体   繁体   中英

Node.js Async only doing one callback

I'm just doing my first bit of Node async stuff, I wanted to do two queries to a DB and then print the results one after the other, my code is as follows:

console.log(req.query);

function logAllThings(err,things){
    if (err){
        console.log(err);
    } else {
        console.log(things);
    };
};


async.parallel([
    function(callback) { //This is the first task, and callback is its callback task
        Event.find({}, function(err, events) {
            logAllThings(err,events);
        });
    },
    function(callback) { //This is the second task, and callback is its callback task
        Organisation.find({}, function(err,organisations) {
            logAllThings(err,organisations);
        }); //Since we don't do anything interesting in db.save()'s callback, we might as well just pass in the task callback 
    }
], function(err) { //This is the final callback
    console.log('Both should now be printed out');
});

The issue I have is that the second function (the one that returns organisations) prints them fine. However the one that is meant to return events simply does not and returns {} despite the fact I know the query works as I've tested it elsewhere.

Any help would be appreciated

Thanks

You have to call the callback function passed to each of your waterfall functions, otherwise it won't know when it's finished. Try this:

async.parallel([
    function(callback) { //This is the first task, and callback is its callback task
        Event.find({}, function(err, events) {
            if (err) return callback(err);
            logAllThings(err,events);
            callback();
        });
    },
    function(callback) { //This is the second task, and callback is its callback task
        Organisation.find({}, function(err,organisations) {
            if (err) return callback(err);
            logAllThings(err,organisations);
            callback();
        }); //Since we don't do anything interesting in db.save()'s callback, we might as well just pass in the task callback 
    }
], function(err) { //This is the final callback
    console.log('Both should now be printed out');
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM