我是使用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
非常感谢帮助!
答案 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);
});