在Javascript中通过variables作用域来维护variables

我在使用我正在创build的Node.js应用程序来处理variables作用域时遇到了困难,通常我知道variables作用域在函数中(在这种情况下,匿名callback函数)是如何工作的。

我所争论的是通过匿名callback的链/孔维护可变参数的最佳方式什么 ? 在通常情况下,我可以将variables传递给函数,但是因为我正在使用mongoose(mongodb ORM),所以我不能在自己的variables中传递,所以不得不求助于每次更深入地定义variables回电话。

这样做的最好方法是什么?

下面是我的代码,我最终得到的variables未定义的时间,我想用他们的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); } }); } }); } }); 

当然,有一个更好的方式来处理这个…任何帮助非常感激。

 User.find({ id: userAid }, function(err, userA) { if (err) throw err; else { User.find({ id: tag.user }, (function(userAName, err, userB) { if (err) throw 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); } }); } }).bind(null, userA.twitter.screenName)); } }); 

可以使用闭包范围( tag.user可通过闭包使用),也可以使用.bind将variables绑定到函数。

例如,我们已经通过这样做了将userANamevariables转换为匿名函数

 (function(userAName, normal, arguments, here) { }).bind(null, userAName));