Эта программа считывает через вложенный объект, который ищет определенный ключ & значений. Как только эти данные будут найдены, он должен инициировать обратный вызов для отправки данных. Объект выглядит следующим образом:Переменная область и проблемы с обратным вызовом
{
"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
@Tomalak данных JSON будет как этот { "имя": "Joel", "название": "КТО", "Эду": { "школа": "ПКМ", "колледж" : "ГНК", "пг": "CDAC", "экстракт": "Это большой текст ..." }} и желаемый результат будет { "название": " CTO ", " extract ":" Это большой текст ... " } –
И каково желаемое поведение/результат? Вы не указали, что должна делать функция. Кроме того, как утверждает @Svabael ниже, до сих пор это не имеет никакого отношения к асинхронному программированию. – Tomalak