所以我目前正试图让以下内容简单地返回变量obj。它位于“auth.js”
module.exports = {
cas_login: function(ticket) {
var obj;
cas.validate(ticket, function(err, status, username) {
if (err) {
// Handle the error
obj={status: false, username: null};
} else {
// Log the user in
obj={status: status, username: username};
}
});
if(obj){
return obj;
}
}
};
然后通过“console.log(auth.cas_login(ticket))调用(作为测试);”我知道所有内容都已正确链接,因为auth.cas_login只会让它返回{hello:ticket},但由于某种原因,cas.validate会导致问题。我是异步语言的新手,并认为它可能与此有关。
答案 0 :(得分:0)
这样的问题在S.O.上出现了很多。但在问题结束之前,我会引导您完成异步行为,因为您不熟悉它。
让我们运行cas_login
。它有三个陈述:
obj
,初始化为undefined
。validate
。这是异步运行的,这意味着当调度程序说它可以执行时,执行将排队等待运行。但它现在无法运行,因为cas_login
尚未完成。if (obj) return obj
。那么obj
未定义,这是假的,因此跳过if
语句。这意味着函数结束时没有遇到return
语句。在JS中,这意味着函数返回undefined。您需要做的是使cas_login
异步。你试图让它同步。将其定义为采用自己的回调,处理值obj
。沿着这些方向(未经测试):
module.exports = {
cas_login: function(ticket, callback) {
cas.validate(ticket, function(err, status, username) {
if (err) {
callback({status: false, username: null});
} else {
callback({status: status, username: username});
}
});
}
};