在Meteor.methods中使用Future.wait()
使用在Meteor.methods中使用Future.wait(),meteor,Meteor,使用new Future()以异步模式运行订阅工作正常,但如果在Meteor.method中执行相同操作,则应用程序将崩溃,并显示一条消息,说明它无法在没有光纤的情况下等待。但是我必须从Meteor.method返回一些东西 方法如下: /**global variables*/ var Fiber = Npm.require("fibers"); var Future = Npm.require("fibers/future"); Meteor.methods({ 'single-data'
new Future()
以异步模式运行订阅工作正常,但如果在Meteor.method
中执行相同操作,则应用程序将崩溃,并显示一条消息,说明它无法在没有光纤的情况下等待。但是我必须从Meteor.method返回一些东西
方法如下:
/**global variables*/
var Fiber = Npm.require("fibers");
var Future = Npm.require("fibers/future");
Meteor.methods({
'single-data': function (form, state, tenant, selectedRow, search, sort) {
var user = Meteor.users.findOne({_id: this.userId});
/**check if the user can see the data in the state*/
if (!(isAdmin(user, form) || hasPermission(user, form, state, "read"))) {
return null;
}
/** set the sort order for the query*/
var order = [];
if (sort) {
order.push(["fieldData." + sort.column + ".0.value", sort.order == 1 ? "asc" : "desc"]);
}
order.push(["submitTime", "desc"]);
var query = dataQuery(form, state, _.uniq(_.pluck(user.groups, "tenant")), search);
var fut = new Future();
var fut = new Future(); setTimeout(function () {
fut.ret(FormDatas.find(query, {sort: order, skip: selectedRow, limit: 1}).fetch()[0]);
}, 0 * 1000);
// Wait for async to finish before returning the result
return fut.wait();
}
});
我相信future的返回值不应该包含异步代码,它应该发生在调用
ret()
之前。无论如何,在你的情况下,未来是不需要的,只需打电话
return FormDatas.findOne(query, options);