首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Meteor.bindEnvironment的Meteor.Collection

使用Meteor.bindEnvironment的Meteor.Collection
EN

Stack Overflow用户
提问于 2014-03-03 07:04:37
回答 2查看 5K关注 0票数 2

在Meteor.binEnvironment中已经存在的函数中,当我运行<collection>.find ({})时,我得到错误throw new Error ('Can \' t wait without a fiber ');如果您也在Meteor.bindEnvironment(<collection>.find ({}))中进行该调用,则错误消息变为:throw new Error (noFiberMessage);

有问题的函数通过Meteor.methods ({})运行,我在哪里出错了?

重现错误的示例:

代码语言:javascript
复制
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());
  })
});
EN

回答 2

Stack Overflow用户

发布于 2014-03-03 17:34:27

请尝试使用Meteor._wrapAsync

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

代码语言:javascript
复制
var asyncfunction = function(callback) {
    Meteor.setTimeout(function(){
        callback(null, Sessions.findOne({}))
    }, 15000);
}

var syncfunction = Meteor._wrapAsync(asyncfunction);

var result = syncfunction();

console.log(result);

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

票数 1
EN

Stack Overflow用户

发布于 2014-03-10 10:52:28

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

代码语言:javascript
复制
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());
  })
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22134897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档