我在使用Node.js应用程序进行变量作用域时遇到问题,我通常理解变量作用域在/围绕某个函数的工作方式(在这种情况下,匿名回调函数)。在Javascript中通过变量作用域维护变量
我正在与之争斗的是什么是通过匿名回调链/洞维持可变物的最佳方式。在通常情况下,我可以将变量传递给函数,但是因为我使用猫鼬(mongodb ORM),所以我不能将自己的变量传入。因此,不得不求助于每次更深入地定义变量回电话。
这样做的最好方法是什么?
下面是我的代码,我结束了在不确定的时间越来越变量我想用他们的tweeting:
var userBid = tag.user;
User.find({id: userAid}, function(err, userA){
if (err) {console.log("Error getting user A for tweeting ", err)}
else {
var userAName = userA.twitter.screenName;
var userBid2 = userBid;
User.find({id: userBid2}, function(err, userB){
if (err) {console.log("Error getting user B for tweeting ", err)}
else {
var action = "@"+ userAName + " just claimed some of @" + userB.twitter.screenName + " 's turf as their own.";
twitterClient.updateStatus(action, function(err, resp){
if (!err) {
console.log("Tweeted: ", action);
} else {
console.log("TwitBot error:", err);
}
});
}
});
}
});
肯定有处理这更好的办法... 任何帮助是多少赞赏。
这不是PHP/C/Java的令行禁止的
userAName
变量到匿名函数!你不必传递你的变量。它们将始终通过范围查找链可用......只需在范围的顶层声明它们(就像现在一样),然后就可以从这些函数内部访问它们。 **不需要将它们传递给兔子洞!! ** –嗯......如果是这样的话,为什么我的变量没有定义?绑定/ currying的原因是什么,请参阅@Raynos的回答低于 – Christopher
迟到比永远更好:您的userBid已被正确定义,并且应该可以在您的查询中访问。它是在你的函数之外定义的,因此可以在你的函数内部看到。只要确保该变量实际上已正确定义,并且该tag.user不是未定义的。一个简单的console.log(userBid)应该解决这个问题。 – Jorre