【发布时间】:2015-11-08 02:28:46
【问题描述】:
我想知道在使用异步方法时如何正确处理 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);,但这确实会在服务器端引发错误。客户端错误参数然后得到 500 服务器错误,尽管在服务器上抛出的错误是 401 Unauthorized 错误。
那么,是否可以正确使用 Fiber 的 Future,让客户端回调接收到与服务器回调相同的错误参数?
【问题讨论】:
-
不是解决方案而是澄清,
HTTP调用可以在服务器端同步var res = HTTP.get(url, {}),还有很多其他用例我们需要在服务器端使用回调,我正在寻找一个答案也很好
标签: javascript asynchronous meteor node-fibers