我尝试使用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
仍未定义。什么给了?
答案 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
});