Mein Meteor Code geht ein paar Meteor.call Methoden tief an einigen Punkten. Wenn ich einen Fehler in der 2. Schicht habe und diesen Meteorfehler zurück zur Kundenseite werfen möchte, wie kann ich das tun?Wie gebe ich einen Fehler von einer Meteor.call-Methode in einem anderen Meteor.call zurück
Zur Zeit habe ich so etwas, aber ich bin immer sehr verwirrend Ausgänge und ich glaube nicht vollständig verstehe ich, was passiert, wenn ich rufe throw new Meteor.Error(500, e.category_code, e.description);
In Client.js
Meteor.call('firstCall', data, function (error, result) {
if(result) {
doSomething();
}
else{
console.log(error);//just shows 500
}
});
In server.js
var Future = Meteor.npmRequire("fibers/future");
function extractFromPromise(promise) {
var fut = new Future();
promise.then(function (result) {
fut.return(result);
}, function (error) {
console.log(error);
fut.throw(error);
});
return fut.wait();
}
firstCall: function (data){
try{
Meteor.call('secondCall', data, 'http://testhref.com/test', 'http://testhref2.com/test' function (error, result) {
return result;
});
}
catch(e){
throw new Meteor.Error(500, e.category_code, e.description);
}
}
secondCall: function (data, paymentHref, otherHref){
try{
var associate = extractFromPromise(balanced.get(paymentHref).associate_to_customer(otherHref).debit({
"amount": data.paymentInformation[0].total_amount * 100,
"appears_on_statement_as": "Trash Mountain"}));
}
catch(e){
Collection.update(data.id, {
$set: {
'failed.category_code': e.category_code,
'failed.description': e.description
}
});
throw new Meteor.Error(500, e.category_code, e.description);
}
}
Auch dies scheint nicht die korrekte Information aus dem Fehler zurückzugeben. Mein Beispiel oben reicht nicht aus, um das Problem zu erklären.Ich habe meine ganze firstCall in einen Versuch Catch gewickelt, aber wenn der Fehler ausgelöst wird, scheint der Code weiterhin ausgeführt werden, was einen anderen Fehler verursacht, und das ist, was von FirstCall an den Client zurückgegeben wird. – JoshJoe
Rufen Sie 'secondCall' synchron an? Siehe meine Überarbeitung. –
Ich habe es nicht synchron aufgerufen. Das hat es behoben, aber ich denke, dass es sicherlich einen besseren Weg geben muss, den Fehler zum Client zu bringen. Ich bin mir sicher, dass ich das nicht so gut mache. Vielen Dank – JoshJoe