非同期メソッドを使用するときに Meteor でエラーを適切に処理する方法を知りたいです。次のことを試しましたが、エラー パラメータではなく、クライアント コールバックの結果パラメータでエラーが返されます。
サーバーコード:
Future = Npm.require('fibers/future');
Meteor.methods({
'myServerMethod': function(){
var future = new Future();
// URL to some remote API
var url = UrlOfTheApiIWantToCall;
HTTP.get(url, {//other params as a hash},
function (error, result) {
if (!error) {
future.return(result);
} else {
future.return(error);
}
}
);
return future.wait();
}
});
クライアントコード:
Meteor.call('myServerMethod', function (error, result) {
if(error){
console.warn(error);
}
console.log('result', result);
});
上で言ったように、「エラー」は、サーバー側の HTTP.get() がエラーを返したときに、クライアント側のイベントで常に未定義です。サーバー側でも に置き換えfuture.return(error);
てみましfuture.throw(error);
たが、これは本当にサーバー側でエラーをスローします。サーバーでスローされたエラーは 401 Unauthorized エラーでしたが、クライアント側のエラー パラメーターは 500 サーバー エラーを取得します。
では、クライアント コールバックがサーバー コールバックと同じエラー パラメータを受け取るように、Fiber の Future を適切に使用することは可能ですか?