"不能在没有光纤的情况下等待#34;查询db时出错?

时间:2017-03-16 21:33:00

标签: javascript node.js mongodb meteor coffeescript

我有以下代码读取CSV文件,然后从数据库中提取文档:

(kbd "<C-right>")

但是当我打电话给fs.readFile process.env.PWD + '/data/errorports.csv', 'utf8', (err, data) -> if err console.log "Error reading csv", err return rows = data.split('\n') for row in rows columns = row.split(',') airportCode = columns[0] airport = Airports.findOne({_id: airportCode}) console.log 'airport:', airport 时,它会抛出错误:

Airports.findOne({_id: airportCode})

任何人都可以看到为什么我会收到此错误?有关如何绕过它的任何建议吗?

2 个答案:

答案 0 :(得分:1)

您可能需要使用Meteor.wrapAsync()来执行此操作(使您的异步函数在Fider中运行...这将允许您在内部执行您的流星代码)。这是一个例子。

var syncReadFile = Meteor.wrapAsync(fs.readFile);

syncReadFile(process.env.PWD + '/data/errorports.csv', 'utf8', function(err, data) {
    if (err) {
      console.log "Error reading csv", err;
      return;
    }

    rows = data.split('\n');
    for (row in rows) {
      columns = row.split(',');
      airportCode = columns[0];
      airport = Airports.findOne({_id: airportCode});
      console.log 'airport:', airport;
  }
});

答案 1 :(得分:0)

或者......您可以尝试将回调包装到

Meteor.bindEnvironment()

会像

fs.readFile process.env.PWD + '/data/errorports.csv', 'utf8',
Meteor.bindEnvironment(function(err, data) {
  [..your code..]
});