在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());
})
});
答案 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());
})
});