gpt4 book ai didi

javascript - 在 Javascript 中通过变量作用域维护变量

转载 作者:行者123 更新时间:2023-11-30 18:39:31 26 4
gpt4 key购买 nike

我在使用我正在制作的 Node.js 应用程序处理变量范围时遇到问题,通常我了解变量范围如何在函数内/周围工作(在本例中为匿名回调函数)。

我正在努力解决的问题是通过匿名回调链/漏洞维护变量的最佳方式是什么。通常我可以将变量传递给函数,但是因为我使用的是 mongoose (mongodb ORM),所以我不能传递我自己的变量。因此必须在深入到回调。

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

下面是我的代码,当我想用​​它们发推文时,我最终得到了 undefined variable :

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 将变量绑定(bind)到函数。

例如,我们通过以下方式将 userAName 变量柯里化(Currying)到匿名函数中

(function(userAName, normal, arguments, here) {

}).bind(null, userAName));

关于javascript - 在 Javascript 中通过变量作用域维护变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7274832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com