如何访问函数外部的变量

时间:2016-05-24 16:31:47

标签: node.js mongoose

请耐心等待。我似乎无法理解如何在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上寻找其他问题,但其他答案的解决方案对我来说似乎没有用。

砂眼

2 个答案:

答案 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/