Meteor Mongo 在 Fiber 中更新回调

Meteor Mongo update callback in Fiber

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

Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.

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

//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');
  }

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

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

这将确保回调将有一个纤程可供使用(它将创建一个新纤程或使用它在其中调用的纤程)。

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