[英]Meteor.call and Meteor.publish: returning Collection.find properly
這是我目前擁有的一家酒吧:
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
。
先謝謝您的幫助!
正如Fuzzybabybunny提到的那樣,會話僅在客戶端上運行,因此您采用的方法不適用於在服務器上運行的發布。 發布中的方法調用是異步的,因此您必須等待其結果才能使用它返回數據庫游標。 嘗試使用一種以同步方式使用異步調用的方式。 這是一個例子:
當然,還有其他方法,例如Fibers包中的Future類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.