javascript:函数在分配给变量时返回值undefined

时间:2014-07-25 18:10:18

标签: javascript callback asynccallback

我尝试使用this stackOverflow article作为模板,将函数的返回值分配给变量。这是我的代码:

var host = getHostName(djId, function(name) {
    return name;
});
console.log(host);    // undefined :(


function getHostName(id, cb) {
    var reply;
    userColl.findById(id, function (err, dj) {
        if (err) {
            reply = "db error";
        } else {
            reply = dj.firstName + ' ' + dj.lastName;
        }
        console.log(reply + ' reply');    // working as expected!
        cb(reply);
    });
}

console.log(回复)正在按预期工作,但当我尝试调用该函数时,host仍未定义。什么给了?

1 个答案:

答案 0 :(得分:1)

因为getHostName的结果本身并没有返回任何内容。它看起来像是一个异步函数,所以如果你需要对值做一些事情,你必须把它放在回调中。

内部函数(回调)是异步执行的,所以当它运行时,getHostName的执行已经完成。这就是内部函数无法向变量返回任何内容的原因。所有使用名称做的事情的代码都必须在回调中。

var host = getHostName(djId, function(name) {
    console.log(name); // Here you go
    anotherFn(name); // Here you can have the rest of your code which needs the name
});