'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
Solution 1:[1]
If b is a synchronoys 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);
});
Solution 2:[2]
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);
});
Solution 3:[3]
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'):
});
Solution 4:[4]
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);
});
....
});
});
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Guffa |
| Solution 2 | clemens |
| Solution 3 | nekman |
| Solution 4 | M22 |
