【问题标题】:Stuck between JSON nested object & Callback in Nodejs卡在 Nodejs 中的 JSON 嵌套对象和回调之间
【发布时间】:2016-10-01 17:13:30
【问题描述】:

我的应用程序调用该模块来解析嵌套的 JSON 对象,以读取 2 个键的值。

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 对象?

编辑

代码中存在一些错误,现已更正。

   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);
    };

【问题讨论】:

  • 您的第一个代码块缺少});这是错误发布还是您的程序有语法错误?
  • 递归调用函数时添加callback作为参数
  • callback(null, JSON.stringify('{"title":'+ title + ', "text":' + extract)); 看起来很不对劲。如果你想创建正确的 JSON,你应该将一个对象传递给JSON.stringify: callback(null, JSON.stringify({title: title, text: extract}));。但是您确定要 JSON 而不是对象吗?
  • @Jacob,我一定是在复制代码时出了点问题
  • @FelixKling,我们可以返回一个对象,但是 API 用 JSON 响应调用请求。传递 JSON 可以吗?

标签: javascript json node.js callback


【解决方案1】:

您正在调用parseData(value); 并且没有传递回调;如果您希望使用原始回调,请传递 callback

【讨论】:

  • 我不明白。我将回调函数传递给 parseData(str, function (error, str))。
  • 您在parseData 内递归调用parseData,并且该内部调用不传递回调。
  • 对不起,我的代码有错误,我已经在主要问题部分发布了修改后的代码。在这里,我在 parseData 中递归调用 recursiveFunction。所以我需要修改我对 recursiveFunction 的调用,以便在调用 parseData 模块时传递原始回调。递归函数(str,回调);我说的对吗?
  • 按照现在的写法,您应该不会遇到同样的错误。如果您现在遇到不同的问题,您或许应该以不同的问题发布。
猜你喜欢
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
相关资源
最近更新 更多