如何通过回调函数获取返回值

问题描述 投票:0回答:4

这是我的代码

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);

保存的变量未定义。如何通过回调函数获取返回值

javascript jquery callback
4个回答
28
投票

如果

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);
});

4
投票

您只需将回调作为函数中的参数传递,如下所示

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);
});

3
投票

您需要提交回调函数。示例:

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

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

2
投票

使用承诺。一旦读取/获取数据就解决它。稍后,在调用点使用 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);
        });
        ....
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.