【发布时间】:2016-10-24 10:28:44
【问题描述】:
该程序正在读取嵌套对象以搜索特定的键和值。一旦找到此数据,它必须启动回调以发回数据。对象如下所示:
{
"name": "joel",
"title": "CTO",
"edu": {
"school": "RMB",
"college": "GNK",
"pg": "CDAC",
"extract": "This is a large text ..."
}
}
由于我来自同步编程背景,我无法理解何时必须启动回调并确保变量在范围内
function parseData(str, callback) {
function recursiveFunction(obj) {
var keysArray = Object.keys(obj);
for (var i = 0; i < keysArray.length; i++) {
var key = keysArray[i];
var value = obj[key];
if (value === Object(value)) {
recursiveFunction(value);
}
else {
if (key == 'title') {
var title = value;
}
if (key == 'extract') {
var extract = value.replace(/(\r\n|\n|\r)/gm," ");
callback(null, JSON.stringify({title: title, text: extract}));
}
}
}
}
recursiveFunction(str, callback(null, JSON.stringify({title: title, text: extract})));
};
执行此代码时,出现以下错误
/parseData.js:29
recursiveFunction(str, callback(null, JSON.stringify({title: title, text: extract})));
^
ReferenceError: title is not defined
【问题讨论】:
-
如果没有看到您的输入对象和所需的结果,很难回答这个问题。就目前而言,该功能没有多大意义。
-
@Tomalak JSON 数据应该是这样的 { "name": "joel", "title": "CTO", "edu": { "school": "RMB", "college" : "GNK", "pg": "CDAC", "extract": "This is a large text ..." } } 期望的结果是 { "title": "CTO", "extract": "This是大文本..." }
-
期望的行为/结果是什么?您没有指定该功能应该做什么。此外,正如@Svabael 所述,到目前为止,这与异步编程无关。
-
程序应该扫描嵌套的 JSON 并选择 2 个键的值,一旦完成,就会将此对象返回给调用模块。另外我不确定这是否是进行回调的正确方法 if (key == 'extract') { var extract = value.replace(/(\r\n|\n|\r)/gm," " );回调(空,JSON.stringify({title:title,text:extract})); } 因为看起来流程突然退出 recursiveFunction。在同步编程中,我们确切地知道这两个值何时可用以及何时发回。
-
再次:上面的代码中没有异步组件。所有这些都是完全同步的单线程代码。有多少具有
title和extract属性的对象?一?或者它可以是任何数字?extract总是edu的孩子吗?这可以嵌套多深(换句话说,是否需要递归函数?)
标签: json node.js scope callback