这是我现在的酒吧:
Meteor.publish("searchResults", function (urlString) {
check(urlString, String);
Meteor.call('searchDatabase', urlString, function(error, result) {
if(error) {
return throwError(error.reason);
}
Session.set('searchData', result);
});
return [
Posts.find({_id: {$in: Session.get('searchData')}}),
Farmers.find({_id: {$in: Session.get('searchData')}})
];
});
我原本试图这样做:
Meteor.publish("searchResults", function (urlString) {
check(urlString, String);
Meteor.call('searchDatabase', urlString, function(error, result) {
if(error) {
return throwError(error.reason);
}
return [
Posts.find({_id: {$in: Session.get('searchData')}}),
Farmers.find({_id: {$in: Session.get('searchData')}})
];
});
});
原来后者不会从pub方法返回。它只返回Meteor.call函数,无论如何返回undefined
。但是,前者不断给我Session is not defined
错误。我做错了什么/完成这项工作的正确方法是什么? result
是一个数组,其中包含我需要显示的集合中所有_id
个元素。
提前感谢您的帮助!
答案 0 :(得分:1)
正如fuzzybabybunny所提到的,Sessions仅在客户端上运行,因此您所采用的方法不适用于在服务器上运行的发布。发布中的方法调用是异步调用,因此您必须等待其结果才能使用它来返回数据库游标。尝试使用其中一种方法以同步方式使用异步调用。这是一个例子:
Example on using npm module inside a Meteor method
当然还有其他方法,例如Fibers包中的Future类。