Muhammad Usman
Muhammad Usman

Reputation: 10956

How to get returned a value by a callback function

Here is my code

function save_current_side(current_side) {
    var result;
    var final = a.b({
        callback: function (a) {
            console.log(a); // its working fine here 
            return a;
        }
    });
}

where b is the synchronous function. I am calling the above function anywhere in the code

var saved =  save_current_side(current_side);

The variable saved is undefined. How to get returned valued by callback function

Upvotes: 18

Views: 76404

Answers (4)

Guffa
Guffa

Reputation: 700830

If b is a synchronous method, you simply store the value in a variable, so that you can return it from the save_current_side function instead of from the callback function:

function save_current_side(current_side) {
  var result;
  a.b({
    callback: function (a) {
      result = a;
    }
  });
  return result;
}

If b is an asynchronous method, you can't return the value from the function, as it doesn't exist yet when you exit the function. Use a callback:

function save_current_side(current_side, callback) {
  a.b({
    callback: function (a) {
      callback(a);
    }
  });
}

save_current_side(current_side, function(a){
  console.log(a);
});

Upvotes: 28

Dan
Dan

Reputation: 595

Use Promise. Once data is read/fetched resolve it. Later, at call point use then(data) with resolved value inside. My project example:

function getImage(imagename) {
    return new Promise((resolve, reject) => {
        fs.readFile(`./uploads/${imagename}`, 'utf8', function(err, data){
            if(err) {
                reject(null);
                throw err;
            }
            resolve(data);
        });
    });
}

io.on('connection', async (socket) => {
        getImage(imagename).then(image => {
            console.log('Img contents: ' + image);
        });
        ....
    });
});

Upvotes: 2

Abhishek Tripathi
Abhishek Tripathi

Reputation: 1600

You just have to pass the callback as argument in the function as given below

function save_current_side(current_side,callback) {
   var result;
   var final = a.b(function(){
      callback(a);
   });
}

This is how you can call it anywhere in the code

var saved;
save_current_side(current_side,function(saved){
     console.log(saved);
});

Upvotes: 4

nekman
nekman

Reputation: 1919

You need to submit the callback function. Example:

function save_current_side(current_side, callback) {        
    a.b({
        callback: callback
    });
}

save_current_side(current_side, function() {
  console.log('saved'):
});

Upvotes: 3

Related Questions