如何从Meteor.js

时间:2016-02-04 04:08:13

标签: javascript meteor

我在Meteor.js中的另一个方法中运行一个方法,我想将错误返回给客户端,但我在控制台上收到此错误:

Exception in delivering result of invoking 'validarCupon':

这是我实际上在客户端上调用的方法:

Meteor.methods({
  hacerPedido:function(){
    var carrito = CarritoUsuario.findOne({idUsuario: Meteor.userId()});
    var cupon = carrito.cupon;
    //Texto y lógica del cupón
    Meteor.call("validarCupon", cupon.codigo, function(error, result){
      if(error){
        throw new Meteor.Error("cupon-invalido", error.reason);
      }
    });
    return creditoUsuario;
  }
});

我想要做的是从名为'validarCupon'的方法中获取错误,并将其传递给调用方法'hacerPedido'的客户端。

提前致谢!

2 个答案:

答案 0 :(得分:5)

您正在异步调用内部方法,这会阻止您向调用者返回任何内容,因为return creditoUsario很可能在之前被称为

希望您不需要异步执行此操作,在这种情况下您只需执行此操作:

Meteor.methods({
  hacerPedido:function(){
    var carrito = CarritoUsuario.findOne({idUsuario: Meteor.userId()});
    var cupon = carrito.cupon;
    //Texto y lógica del cupón
    Meteor.call("validarCupon", cupon.codigo);
    return creditoUsuario;
  }
});

因为异常泡沫起来。因此,validarCupon方法中的任何异常都将自动抛出到客户端。

如果确实需要该方法以异步方式运行,那么您需要稍微更改一下逻辑,因为一旦return发生(方法主体结束),就没有更多的基础可以回复到客户端。

另外,如果你使用上面的解决方案,我建议你甚至不要在服务器中使用方法调用,但要使其功能简单。

答案 1 :(得分:0)

Meteor.call的流星documentation中,它表示在服务器端,您不需要回调,并且流星调用将是同步的。

  

在服务器上

     

在服务器上,您不必传递回调 - 方法调用将只是>阻止直到方法完成,返回结果或抛出一个>异常,就像你直接调用函数一样:

     

//没有回调的服务器上的同步调用   var result = Meteor.call('commentOnPost',comment,postId);

所以,我认为你应该这样做,

Meteor.methods({
  hacerPedido:function(){
    var carrito = CarritoUsuario.findOne({idUsuario: Meteor.userId()});
    var cupon = carrito.cupon;
    //Texto y lógica del cupón
    try {
        var result = Meteor.call("validarCupon", cupon.codigo);
    } catch (error) {
        throw new Meteor.Error("cupon-invalido", error.reason);
    }
    return creditoUsuario;
  }
});