Grijan
Grijan

Reputation: 298

Callback not working inside async.foreachof

I'm getting my callback from my dao and into my service and in my service i have iterated the list of object to be sent to my dao.

My service code

var dao = require('./dao');
var async = require('async');

exports.addUser = function(obj,callback) {
    async.forEachOf(obj,function(value,key,callback){
        dao.addUser(value,function(data){
            callback(data);
        })
    })
}

this callback is not going to my control layer

Control layer

var express = require('express');
var app = express();
var service = require('./service');

app.use(express.urlencoded({ extended: false }));
app.use(express.json());

app.post('/addPerson',function(req,res){
    var obj = req.body;
    console.log(obj);
    console.log("......",obj.name);
    console.log("......",obj.age);
    service.addUser(obj,function(data) {
        console.log("---->",data);
        res.json(data);
    })
})

var server = app.listen(8080,function(){});

i need to send the data back to the browser

Upvotes: 0

Views: 416

Answers (1)

Muthukumar
Muthukumar

Reputation: 9589

There are two problems with your existing code 1. By referring callback you are calling callback of the asyn.forEachOf 2. Trying to call ur original callback (which intern does res.json(data)). Here you are trying to send multiple response which is not possible.

Try using async.mapValues instead

exports.addUser = function(obj,callback) {
    async.mapValues(obj,function(value,key,cb){
        dao.addUser(value,function(data){
            cb(null, data);
        })
        }, function(err, result) {
            // result is now a map of results for each key
           callback(result);
      });
}

Upvotes: 1

Related Questions