2016-10-01 2 views
1

Мое приложение вызывает модуль для разбора вложенного объекта JSON, чтобы считывать значения из 2-х ключей.Застревание между вложенным объектом JSON и обратным вызовом в Nodejs

parseData(str, function (error, str) { 
    if (err) { 
     console.log("Error - parseData : ", err); 
    } else { 
     console.log(str); 
    } 

И модуль parseData выглядит следующим образом

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)) { 
     parseData(value); 
     } else { 
     if (key == 'title') { 
      title = value; 
     } 

     if (key == 'extract') { 
      var extract = value.replace(/(\r\n|\n|\r)/gm," "); 
      callback(null, JSON.stringify('{"title":'+ title + ', "text":' + extract)); 
     } 
     } 
    } 
    } 

    recursiveFunction(str); 

} 

Но он показывает следующее сообщение об ошибке

/modules/parseData.js:22 
       callback(null, JSON.stringify('{"title":'+ title + ', "text":' + extract)); 
      ^

TypeError: callback is not a function 

Почему обратный вызов неудачу? Как вернуть объект JSON?

EDIT

Были некоторые ошибки в коде и теперь исправлена.

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') { 
         title = value; 
        } 

        if (key == 'extract') { 
         var extract = value.replace(/(\r\n|\n|\r)/gm," "); 
         callback(null, JSON.stringify('{"title":'+ title + ', "text":' + extract)); 
        } 
       } 
      } 
     } 
     recursiveFunction(str); 
    }; 
+0

В вашем первом блоке кода отсутствуют '}' и ')'; является ли неправильная запись или ваша программа имеет синтаксическую ошибку? – Jacob

+0

добавить 'callback' в качестве параметра, когда вы вызываете функцию рекурсивно –

+0

' callback (null, JSON.stringify ('{"title":' + title + ', "text":' + extract)); 'выглядит очень неправильно , Если вы хотите создать правильный JSON, вы должны передать объект 'JSON.stringify':' callback (null, JSON.stringify ({title: title, text: extract})); '. Но вы уверены, что хотите JSON вместо объекта? –

ответ

0

Вы звоните parseData(value); и не передаете обратный вызов; pass callback, если вы хотите использовать этот оригинальный обратный вызов.

+0

Я не понял. Я передаю функцию обратного вызова в parseData (str, function (error, str)). –

+1

Вы вызываете 'parseData' рекурсивно в' parseData', и этот внутренний вызов не передает обратный вызов. – Jacob

+0

Извините, что в моем коде была ошибка, я опубликовал исправленный код в главном разделе вопросов. Здесь я вызываю рекурсивную функцию рекурсивно в parseData. Поэтому мне нужно изменить мой вызов для рекурсивной функции, чтобы исходный обратный вызов передавался при вызове модуля parseData. рекурсивная функция (str, callback); Я прав? –

Смежные вопросы