如何在节点js中调用函数?

时间:2017-06-07 04:32:29

标签: javascript node.js function callback

我遇到了节点JS的问题。

基本上,我有这个功能:

let getImageName = function(query,callback){
  Images.getImageById(query,function(err,image){
    return image.filename;
  });
}

但是当我调用它时,console.log()打印未定义,我知道函数getImageName正在工作。

app.get('/api/books/:_id', function(req, res){
Book.getBookById(req.params._id, function(err,book){
    if(err){
        throw err;
    }
    console.log(getImageName(book.cover));
});
});

1 个答案:

答案 0 :(得分:0)

您正在尝试将值从回调函数返回到异步函数。他们不这样做。您正在将getImageById()视为同步,但getImageById()是异步的(可以从回调的方式推断出来)。

Images.getImageById(query,function(err,image){
    return image.filename;
  });

根据您的使用情况,有许多解决方案。最简单的可以console.log()移动到回调内部。 (但是,如果您随后将console.log()更改为return语句,则会再次出现同样的问题。)

如果这一切都令人困惑,可以在https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/进行简短说明。