我有这个 Meteor 代码:
Meteor.methods({
'addEmailToList': function(email){
var mailChimpCall = Meteor.wrapAsync(HTTP.call);
try {
var result = mailChimpCall( 'POST', 'https://us10.api.mailchimp.com/3.0/lists/yyy/members/', {
auth: 'xxx',
header: 'content-type: application/json',
data: {"email_address":email, "status":"subscribed"}
});
} catch(error){
console.log(error);
throw new Meteor.Error("Bad result: ", "It was an error when posting");
}
return result
}
});
这会导致以下响应:
{ [Error: failed [400] {"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Member Exists","status":400,"detail":"jeff@jeff.com is already a list member. Use PUT to insert or update list members.","instance":""}] stack: [Getter] }
如何从 js 中的变量响应中获取 status
(400)?
var errorStatus = SOME CODE HERE
最佳答案
有一个bug目前在 Meteor.wrapAsync 中,所以获取错误消息有点痛苦。最好制定一种新方法来解决问题。此解决方法的所有功劳均归功于 github/meteor 论坛用户 @faceyspacey。
var Future = Npm.require( 'fibers/future' );
Meteor.makeAsync = function(fn, context) {
return function (/* arguments */) {
var self = context || this;
var newArgs = _.toArray(arguments);
var callback;
for (var i = newArgs.length - 1; i >= 0; --i) {
var arg = newArgs[i];
var type = typeof arg;
if (type !== "undefined") {
if (type === "function") {
callback = arg;
}
break;
}
}
if(!callback) {
var fut = new Future();
callback = function(error, data) {
fut.return({error: error, data: data});
};
++i;
}
newArgs[i] = Meteor.bindEnvironment(callback);
var result = fn.apply(self, newArgs);
return fut ? fut.wait() : result;
};
};
例如,将其放置在 server/lib/makeAsync.js
等位置,并像使用 Meteor.wrapAsync 一样使用它,但需要注意的是,这会返回一个带有错误和数据键的对象,而不是抛出错误。因此,将现有的 try/catch 替换为 if (response.error)
来获取错误,然后 var statusCode = response.data.statusCode;
!
关于javascript - Meteor:从错误响应中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34494752/