这是我的代码
function save_current_side(current_side) {
var result;
var final = a.b({
callback: function (a) {
console.log(a); // its working fine here
return a;
}
});
}
其中b是同步函数。 我在代码中的任何位置调用上述函数
var saved = save_current_side(current_side);
保存的变量未定义。如何通过回调函数获取返回值
如果
b
是同步方法,您只需将值存储在变量中,这样您就可以从 save_current_side
函数而不是从回调函数返回它:
function save_current_side(current_side) {
var result;
a.b({
callback: function (a) {
result = a;
}
});
return result;
}
如果
b
是异步方法,则无法从函数返回值,因为退出函数时该值还不存在。使用回调:
function save_current_side(current_side, callback) {
a.b({
callback: function (a) {
callback(a);
}
});
}
save_current_side(current_side, function(a){
console.log(a);
});
您只需将回调作为函数中的参数传递,如下所示
function save_current_side(current_side,callback) {
var result;
var final = a.b(function(){
callback(a);
});
}
您可以在代码中的任何位置调用它
var saved;
save_current_side(current_side,function(saved){
console.log(saved);
});
您需要提交回调函数。示例:
function save_current_side(current_side, callback) {
a.b({
callback: callback
});
}
save_current_side(current_side, function() {
console.log('saved'):
});
使用承诺。一旦读取/获取数据就解决它。稍后,在调用点使用 then(data) 并在其中解析值。我的项目示例:
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);
});
....
});
});