请耐心等待。我似乎无法理解如何在FindOne函数之外更新变量。
所以:
#include <Lobotank.h>
#include <tank_Cwrap.h>
int temp_R=0;
int temp_L=0;
int c15=0;
void setup()
{
enableDebug();
//test sensors(1000);
set speed(125);
}
void loop()
{
update sensors();
int pattern = 0;
long rndm = random(0,10);
serial.println(rndm);
//serial.println(temp_L);
//serial.println(lf_left);
//serial.println(lf_mleft);
//serial.println(lf_mright);
//serial.println(lf_right);
if (lf_left>= 500)
pattern += 8;
if (lf_mleft >= 500)
pattern += 4;
if (lf_mright >= 500)
pattern += 2;
if (lf_right >= 500)
pattern += 1;
switch (pattern)
{
case 0:
if (temp_R ==1)
turnRight_hard();
else
turnAround_left()
break;
case 1:
turnRight_slight();
temp_R = 1;
break;
case 2:
turnRight_slight();
temp_R = 1;
break;
case 3:
delay(25);
turnRight_slight();
break;
case 6:
forward();
temp_R = 0;
c15 = 0;
break;
case 7: //turn right
turnRight_hard();
temp_R = 1;
break;
case 8:
turnleft_slight();
temp_R = 0;
break;
case 12:
delay(15);
turnLeft_slight();
break;
case 14: //turn left
turnLeft_hard();
break;
case 15:
delay(25);
if (rndm <= 5 && c15 <= 3)
turnleft_hard();
else
{
if (rndm >= 6 && c15 <= 3)
turnRight_hard();
else
{
if (c15 >= 5)
turnRight_hard();
else
{
if (c15>= 10)
stop();
}
}
}
c15++;
break;
}
我认为它应该能够找到userPostCount变量,因为它是范围链中的下一个级别。
我有什么想法可以访问它吗?我需要将该变量放在函数之外,因为我将在以后用于其他mongoose活动。
我将userPostCount视为未定义。
提前感谢您的帮助!
PS:我在SO上寻找其他问题,但其他答案的解决方案对我来说似乎没有用。砂眼
答案 0 :(得分:4)
请使用callbacks。
function getPostsCount(callback) {
userPostsModel.findOne({'profileID':req.session.id}, function(err, usersPostCountDB) {
if(usersPostCountDB) {
callback(null, req.body.postsCount + 1);
} else {
console.log('There was an error getting the postsCount');
callback(true, null);
}
});
}
从外部通过传递回调函数作为参数来调用它。所以回调函数将在getPostsCount()
返回(完成)后立即执行..
getPostsCount(function(error, postsCount) {
if (!error) {
console.log('posts count: ', postsCount);
}
});
答案 1 :(得分:1)
您正在尝试从回调函数返回值。如果您尝试在回调函数中使用结果,则会更容易。
你可以做的另一件事是你可以定义一个函数并给它一个回调函数,你可以使用它。
function foo(fn){
userPostsModel.findOne({'profileID':req.session.id}, function(err, usersPostCountDB) {
if(usersPostCountDB){
userPostCount = req.body.postsCount + 1;
fn(userPostCount);
} else {
console.log('There was an error getting the postsCount');
}
});
}
foo(function(userPostCount){
alert(userPostCount);
})
如果您正在使用jquery,则可以使用延迟对象。 http://api.jquery.com/category/deferred-object/