【问题标题】:Meteor Mongo update callback in FiberFiber 中的 Meteor Mongo 更新回调
【发布时间】:2020-07-20 10:06:30
【问题描述】:

当客户端调用更新 mongo 集合但产生以下错误的服务器端方法时,会触发此流星代码:

错误:Meteor 代码必须始终在 Fiber 中运行。尝试使用 Meteor.bindEnvironment 包装传递给非 Meteor 库的回调。

知道如何消除此错误以便进行更新吗? 谢谢

//server/methods.js

  'importFromAccess': function(){
    let fileName = 'C:\\Users\\ABC\\Downloads\\tblCstmrs.txt';

   const readInterface = readline.createInterface({
      input: fs.createReadStream(fileName),
      output: process.stdout,
      console: false
    });

    readInterface.on('line', function(line) {
      let custObj = customerMsAccessDataObj(line);
      console.log("will update");
      ContactsCol.update(custObj, { upsert: true }, Meteor.bindEnvironment( function (err, result) {
        if (err) throw err;
        console.log(result);
     })
     );
      console.log("finished update")
    });
 }
 
 //client file
 
   'msAccess_autoShop': (event, fullName) => {
    Meteor.call('importFromAccess');
  }

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    readInterface.on('line', function (line) { ... }) 回调在纤程之外调用。有一个 Meteor.bindEnvironment 将回调包装在纤维中:

    readInterface.on('line', Meteor.bindEnvironment(function (line) { ... }));
    

    这将确保回调将有一个可使用的纤维(它要么创建一个新的,要么使用它在其中调用的那个)。

    还有Meteor.wrapAsync,它将回调样式的函数转换为同步函数(它实际上是异步的,但纤程会处理它)。

    【讨论】:

      猜你喜欢
      • 2015-08-16
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多