Meteor.Collection与Meteor.bindEnvironment
在一个函数,它已经内Meteor.binEnvironment,当我运行<collection>.find ({})
,我得到的错误throw new Error ('Can \' t wait without a fiber ');
如果你把该呼叫也内Meteor.bindEnvironment(<collection>.find ({}))
,错误消息变成:throw new Error (noFiberMessage);
Meteor.Collection与Meteor.bindEnvironment
有问题的功能通过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());
})
});
使用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);
你可以换任何异步功能,使之同步和与它这样绑定纤维。
我无法在我的项目中应用建议的解决方案,目前采用这种方式: 流星体方法(“teste”:Meteor.bindEnvironment(function(){){ var Fiber = Meteor.require('fibers')) ; VAR未来= Meteor.require( '纤维/未来'); VAR未来=新未来(); 的setTimeout(函数(){ 返回future.return( 光纤(函数(){ Sessions.findOne( {}); })。run() ); },15000); console.log('fut',future.wait()); }) }); – rogeriojlle
在我的项目,我不能申请推荐的解决方案,目前正在做的是这样的:
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());
})
});
我不知道是否能解决您的实际问题,但在你的例子,没有必要使用'流星.bindEnvironment',只需使用'Meteor.setTimeout'而不是'setTimeout'('Meteor.setTimeout'将为你使用'Meteor.bindEnvironment')。 –