在方法中等待流星光标

时间:2016-12-21 21:04:49

标签: mongodb meteor

我有一个大的委托查询,要求我通过" allowDiskUse:true"作为一种选择。这不适用于此处描述的aggegate: https://github.com/meteorhacks/meteor-aggregate/issues/11

我的流星方法在这里定义。当我调用该方法时,我需要等待ondata完成才能将任何内容返回给客户端,但是我尝试的任何内容都不允许我以安全的方式获取数据直到前端。

Meteor.methods({
  'getSummary': function (dept,startDate,endDate,filterType) {

         f = myQuery(startdate,enddate,dayFinalGroup);   
        f.on("data", Meteor.bindEnvironment(function(row) {
//load an array or something here to return
            }));
            f.once("end", Meteor.bindEnvironment(function() {
                // tidy up, in my case end the stream

            }));


    //here I'd return the array loaded

  },

});

这是我的前端。

Meteor.call(
    'getSummary',0,Session.get('start_date'),Session.get('end_date'),1,
    function(error, result){
        if(error){
            console.log(error);
        } else {        
                Session.set('sumTotals',result);
        }
    }
    );

1 个答案:

答案 0 :(得分:1)

终于明白了。我使用了wrapSync

 'getSummary': function (dept,startDate,endDate,filterType) {
         console.log(dept);
         console.log(startDate);
         console.log(endDate);
         console.log(filterType);
         var startdate = new Date(startDate);
         var enddate = new Date(endDate);
         var arr = [];
         f = myQuery(startdate,enddate,dayFinalGroup);   

         var fetchCursor = Meteor.wrapAsync(function fetchCursor (cursor, cb) {

                        cursor.each(function (err, doc) {
                        if (err) return cb(err);
                        if (!doc) return cb(null, { done: true }); // no more documents

                        arr.push(doc);
                        });
        });


     var myData = fetchCursor(f);




        return arr;