为什么异步Meteor.call()不返回任何内容

时间:2015-11-18 03:56:18

标签: asynchronous meteor methods synchronization call

我在客户端有以下代码:

Meteor.methods({
    getOldTests: function (m_user, test_id, course, language) {
        var tests = Tests.findOne({email: m_user.email, course_en: course, test_id: test_id});
        if (tests) {
            console.log(tests);
            return Questions.find({course_en: course, variant: tests.variant, language: language});
        } else {
            return false;
        }
    },});

服务器端具有以下方法:

data

变量reactive-dictMeteor.call()

那么,为什么在客户端的setw()函数内没有执行任何操作(没有控制台输出),而实际上它在服务器端调用该方法(控制台输出中间结果)?

谢谢,

2 个答案:

答案 0 :(得分:1)

看起来您正在使用pub-sub更合适的方法:

服务器

Meteor.publish('getOldTests',function (m_user, test_id, course, language) {
  var tests = Tests.findOne({email: m_user.email, course_en: course, test_id: test_id});
  if (tests) return Questions.find({course_en: course, variant: tests.variant, language: language});
  else this.ready();
});

<强>客户端:

Meteor.subscribe('getOldTests',m_user, test_id, course, language);

答案 1 :(得分:0)

表单服务器端的数据库提取和API调用应包含在光纤内。试试这个:

Future = Npm.require('fibers/future');
getOldTests: function (m_user, test_id, course, language) {
    var myFuture = new Future();
    var tests = Tests.findOne({email: m_user.email, course_en: course, test_id: test_id});
    if (tests) {
        console.log(tests);
        myFuture.return(Questions.find({course_en: course, variant: tests.variant, language: language}));
    } else {
        return false;
    }
 return myFuture.wait();
}

question可能会有所帮助。