[英]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.