【问题标题】:"Can't wait without a fiber" error when querying db?查询数据库时出现“没有光纤就等不及”的错误?
【发布时间】:2017-08-08 06:45:34
【问题描述】:

我有以下代码读取 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

谁能明白我为什么会收到这个错误?有关如何解决它的任何建议?

【问题讨论】:

    标签: javascript node.js mongodb meteor coffeescript


    【解决方案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;
      }
    });
    

    【讨论】:

      【解决方案2】:

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

      Meteor.bindEnvironment()

      应该是这样的

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

      【讨论】:

        猜你喜欢
        • 2016-10-25
        • 2017-11-04
        • 2014-02-28
        • 1970-01-01
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        • 2017-04-13
        • 2021-10-06
        相关资源
        最近更新 更多