使用Meteor.bindEnvironment进行Meteor.Collection

时间:2014-03-02 23:04:37

标签: meteor node-fibers

在Meteor.binEnvironment中已有的函数中,当我运行<collection>.find ({})时,出现错误throw new Error ('Can \' t wait without a fiber '); 如果您也将该通话置于Meteor.bindEnvironment(<collection>.find ({}))内,则错误消息将变为:throw new Error (noFiberMessage);

相关功能贯穿Meteor.methods ({}) 我哪里错了?

重现错误的示例:

Meteor.methods({
  "teste" : Meteor.bindEnvironment(function(){
    var Future = Meteor.require('fibers/future');
    var future = new Future();
    setTimeout(function(){
      return future.return(Sessions.findOne({}))
    }, 15000);
    console.log('fut', future.wait());
  })
});

2 个答案:

答案 0 :(得分:1)

请尝试使用Meteor._wrapAsync

这是异步函数的一个示例,但任何其他函数都可以:

var asyncfunction = function(callback) {
    Meteor.setTimeout(function(){
        callback(null, Sessions.findOne({}))
    }, 15000);
}

var syncfunction = Meteor._wrapAsync(asyncfunction);

var result = syncfunction();

console.log(result);

你可以包装任何异步函数并使其同步并以这种方式将光纤与它绑定。

答案 1 :(得分:1)

我无法在我的项目中应用建议的解决方案,目前这样做:

Meteor.methods({
  "teste" : Meteor.bindEnvironment(function(){
    var Fiber = Meteor.require('fibers');
    var Future = Meteor.require('fibers/future');
    var future = new Future();
    setTimeout(function(){
      return future.return(
        Fiber(function(){
          Sessions.findOne({});
        }).run()
      );
    }, 15000);
    console.log('fut', future.wait());
  })
});