"Can't wait without a fiber"查询数据库时出错?

"Can't wait without a fiber" error when querying db?

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

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}) 时它抛出错误:

/Users/abemiessler/.meteor/packages/meteor-tool/.1.3.4.19lp8gr++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:159
   throw new Error('Can\'t wait without a fiber');
         ^
Error: Can't wait without a fiber

谁能看出我为什么会收到此错误?关于如何绕过它有什么建议吗?

您可能需要使用 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;
  }
});

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

Meteor.bindEnvironment()

会像

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