簡體   English   中英

Meteor.call和Meteor.publish:正確返回Collection.find

[英]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提到的那樣,會話僅在客戶端上運行,因此您采用的方法不適用於在服務器上運行的發布。 發布中的方法調用是異步的,因此您必須等待其結果才能使用它返回數據庫游標。 嘗試使用一種以同步方式使用異步調用的方式。 這是一個例子:

在Meteor方法中使用npm模塊的示例

當然,還有其他方法,例如Fibers包中的Future類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM