簡體   English   中英

如何從 Meteor.js 中方法內的方法返回錯誤

[英]How to return an error from a method inside a method in Meteor.js

我在 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”的客戶端。

您正在異步調用內部方法,這會阻止您將任何內容拋回調用者,因為很可能拋出之前調用了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 (方法主體結束),就沒有更多的基礎可以與客戶端進行通信。

此外,如果您采用上述解決方案,我什至建議不要在服務器內使用方法調用,而是使其功能簡單。

Meteor.call的流星文檔中,它說在服務器端,您不需要回調,流星調用將是同步的。

在服務器上

在服務器上,您不必傳遞回調——方法調用將簡單地 > 阻塞,直到方法完成,返回結果或拋出 > 異常,就像您直接調用該函數一樣:

// 在服務器上同步調用,沒有回調 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;
  }
});

暫無
暫無

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

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