【问题标题】:Converting csv to json object returns undefined将 csv 转换为 json 对象返回 undefined
【发布时间】:2018-09-25 14:39:53
【问题描述】:

我在 S/O 和其他方面找到了几个示例,但它们似乎对我没有帮助。

我正在节点中创建一个私有模块,该模块接收 csv 并将其转换为 json 对象。它正确地将正确的值输出到命令行,但对象本身是未定义的。

exports.csvToJSON = function(file, callback) {
  converter.fromFile(file, function(err, result) {
    if (err) {
      console.log('error: ', error)
    } else {
      return result;
      callback(err, result);
    }
  });
  console.log(callback)
}

我目前正在使用csvtojson 模块并尝试过其他类似的包。我参考过的文章:

我不确定我是否只是没有正确理解回调,但即使我console.log(result.type),它会在有或没有回调的情况下返回未定义。我也尝试过像这样定义回调:

exports.csvToJSON = function(file, callback) {
  csvtojson().fromFile(file, function(err, result) {
    if (err) {
      console.log('error: ', error)
    }
    return result;
    callback(result);
  });
}

这是控制台输出的示例:

   Mirandas-MacBook-Pro:zendesktool mirandashort$ node ./controllers/update.js
[ { ticket:
     { ids: '3280805',
       requester_email: 'miranda@barkbox.com',
       status: 'pending',
       comment: [Object],
       subject: 'sup dog',
       custom_fields: [Object],
       add_tags: 'update_via_csv, dogs_are_cool, sup' } } ] undefined

现在,由于我的其他功能依赖于这个工作,我只在带有exports.csvToJSON('update2.csv') 的文件中调用它,其中update2.csv 是一个实际文件。最终,这将在另一个函数中调用,我将在其中使用异步,但我需要它首先工作。此外,当第二个代码块示例调用该输出时,该输出似乎链接到 console.log(err),我不确定这是为什么。

或者,如果没有csvtojson 也可以完全做到这一点,那也没关系。唯一的要求是 csv 格式的文件可以作为对象数组返回。

【问题讨论】:

  • 哪个console.log 返回未定义?你能包括一个调用你的函数的例子吗?
  • @DanielA.White 虽然我稍后在此应用程序中使用异步,但该帖子本身并不能帮助我理解我的问题。据我所知,我的格式与回复所暗示的相差无几。另外,我没有使用 Ajax。
  • @Catalyst both console.logs 在命令行上返回正确的对象,但如果我对任何结果执行type,它总是未定义的。此外,JSON.parse 无法评估结果,尽管 JSON.stringify 可以(但仍将返回未定义)。我将使用调用示例和控制台输出来更新我的帖子。
  • @DanielA.White 我已尝试添加setImmediate 以进行回调,但仍然没有运气。

标签: json node.js csv callback


【解决方案1】:

知道了。我只是使用瀑布将两个单独的模型放在一起:

exports.csvToJSON = function(file, callback) {
  csvtojson().fromFile(file, function(err, result) {
    if (err) {
      console.log(err);
    } else {
      callback(null, result[0]);
    }
  });
}

exports.zdUpdateMany = function(data, callback) {
  credentials.config.tickets.updateMany(3280805, data, function(err, result) {
    if (err) {
      console.log(err);
    } else {
      callback(false, result);
    }
  });
}


// function to update tickets
exports.processUpdate = function(file, callback) {
  async.waterfall([
    async.apply(exports.csvToJSON, file),
    exports.zdUpdateMany
  ], function(err, result) {
    if (err) {
      console.log(err);
    } else {
      console.log(result);
    }
    callback(err, result);
  });
}

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2020-07-23
    • 2018-12-09
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多