【问题标题】:Meteor method not returning error or result valueMeteor 方法不返回错误或结果值
【发布时间】:2014-06-04 16:52:20
【问题描述】:

这是我的服务器端代码

Meteor.methods({
   addSupportRequest: function (support) {
    Support.insert(support, function (err, id) {
        if (err)
            throw new Meteor.Error(404, "Oops! Network Error. Please submit help request again. ");

            console.log("Support resuest added: " + id);
           return id;

    });
} // End addSupportRequest

});

这是客户端代码

App.Util = {
call: function (method, params, callback) {
    NProgress.start();
    Meteor.apply(method, params, function (error, result) {
        NProgress.done();

       console.log(error);
        console.log(result);
        callback(error, result);

    });
} // end Call

};

请帮我找出为什么流星方法调用没有返回错误或结果。 console.log() 在服务器上显示新记录 ID,但在客户端显示未定义。

【问题讨论】:

    标签: meteor


    【解决方案1】:

    阻止您的方法返回结果的一个问题是return id; 在插入回调的函数范围内,而不是在流星方法的范围内。所以它将从回调中返回,然后在流星方法函数中没有返回,隐式为return undefined

    你应该像这样向方法的作用域添加一个返回值:

    Meteor.methods({
       addSupportRequest: function (support) {
        return Support.insert(support, function (err, id) {
            if (err)
                throw new Meteor.Error(404, "Oops! Network Error. Please submit help request again. ");
    
                console.log("Support resuest added: " + id);
               return id;
    
        });
    } // End addSupportRequest
    

    至于错误,我不知道为什么它没有浮出水面,因为它应该遍历调用堆栈(它在像 return 这样的内部函数内部并不重要)并且因为它是 Meteor.Error它也应该发送给客户端。

    【讨论】:

      【解决方案2】:

      Dsyko 的回答在某种程度上是正确的。但是,异步回调永远不会将其结果传递给已结束的原始函数的范围。

      您想要的是同步运行Support.insert操作,即在I/O发生时获得当前的光纤产量。这就是 Meteor._wrapAsync 函数的用途。幸运的是,您无需手动执行此操作,因为如果您只是从插入操作中取出回调,它将同步运行:

      Meteor.methods({
         addSupportRequest: function (support) {
           var id = Support.insert(support);
           // An error may be thrown here, but it certainly won't be a network error because the request will have already reached the server.
           console.log("Support request added: " + id);
           return id;
         });
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-22
        • 1970-01-01
        • 2012-07-12
        • 2018-05-01
        • 2013-03-09
        • 2014-01-16
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多