无法读取未定义的node.js的属性'length',将json数组传递给方法

时间:2016-05-30 22:25:52

标签: javascript json node.js

我是使用JSON(和一般编码)的新手,我在一个简单的问题看来就困了几个小时。我正在尝试将数组从一个方法传递到下一个方法,但得到以下errormessage:TypeError:无法读取未定义的属性“length”。

通过日志,我可以看到变量是在methodA返回时设置的,但在methodB中使用时是未定义的。

以下是我的代码示例:

function getRecipes(ingredients) {
  ....
    } else {
      var output = [];
      recipes = JSON.parse(body);
      recipelist = recipes.recipes;
      //console.log("Recipes: " + recipes);
      //console.log("Recipeslist: " + recipelist);
      for (i=0; i<recipelist.length; i++) {
        test = recipelist[i];
        //console.log(test);
        output.push(test);
      }
      console.log("output");
      console.log(output);
      return output;
    }
  });
}

function buildGenericMessage(recipes) {
  var elements = [];
  console.log("Recipes");
  console.log(recipes);
  for (i = 0; i < recipes.length; i++) {
    //....
  }

代码由:

执行
sendGenericMessage(sender, buildGenericMessage(getRecipes(getIngredients(text))));

这是变量输出的控制台日志:

[ { publisher: 'My Baking Addiction', 
    f2f_url: 'http://food2fork.com/view/035865', 
    title: 'The Best Chocolate Cake', 
    source_url: 'http://www.mybakingaddiction.com/the-best-chocolate-cake-recipe/', 
    recipe_id: '035865', 
    image_url: 'http://static.food2fork.com/BlackMagicCakeSlice1of18c68.jpg', 
    social_rank: 100, 
    publisher_url: 'http://www.mybakingaddiction.com' },
  { publisher: 'My Baking Addiction', 
    f2f_url: 'http://food2fork.com/view/e7fdb2', 
    ...},
..]

这是食谱变量的控制台日志:

Recipes: 
undefined 

非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

你的函数getRecipes中有一个回调(我可以通过});告诉)。在这里阅读(https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_and_Using_Callbacks)或您可以找到的任何其他来源。通常需要2到3篇文章才能获得良好的感觉。

基本上,您的recipes对象在一些异步任务之后被填充,但该函数在此之前返回远。获取所需数据的方法如下:

function getRecipes(ing, cb) {
  // stuff
  asyncFun(ing, cb)
};

getRecipes(ing, function(err, recipes) {
  buildGenericMessage(recipes);
});