需要一些帮助来升级处理简报订阅者的方法,但不知道该怎么做。基本上我希望能够在出现错误(或正确)的情况下从Mailchimp服务器捕获响应,以便能够处理它。
以下是代码:
Meteor.methods({
subscribeToMailchimp:function(subscriberMail){
mailchimp.request({
method : 'POST',
path : Path,
body : {
"email_address": subscriberMail,
"status": "subscribed"
}
});
return true;
} });
所以根据npm模块的文档:https://www.npmjs.com/package/mailchimp-api-v3和他的例子:
mailchimp.request({
method : 'get|post|put|patch|delete',
path : 'path for the call, see mailchimp documentation for possible calls'
path_params : {
//path parameters, see mailchimp documentation for each call
}
body : {
//body parameters, see mailchimp documentation for each call
},
query : {
//query string parameters, see mailchimp documentation for each call
}
}, callback)
...如果我理解的话,我应该能够实现一些回调。有人能指出我正确的方向来抓住这个回应吗?
谢谢!
答案 0 :(得分:2)
在回调中使用err和结果对象
Meteor.methods({
subscribeToMailchimp: function(subscriberMail){
mailchimp.request({
method : 'POST',
path : Path,
body : {
"email_address": subscriberMail,
"status": "subscribed"
}
},function(err, results){ //here you can handle response
if(err){
console.log(err);
}else{
console.log(results);
}
});
}
});
答案 1 :(得分:1)
总结其他答案,完整的代码片段看起来像这样(我无法测试这个特定的请求,但我认为你明白了这一点):
Meteor.methods({
subscribeToMailchimp: function(subscriberMail){
return Meteor.wrapAsync(function(callback) {
mailchimp.request({
method : 'POST',
path : Path,
body : {
"email_address": subscriberMail,
"status": "subscribed"
}
}, function(err, results) {
if (err) {
callback(err, null);
} else {
callback(null, results);
}
});
})();
}
});
答案 2 :(得分:0)
如果要将远程服务(在这种情况下为Mailchimp)的实际响应(错误/结果)发送到客户端,则必须使服务器Meteor方法“挂断”,等待异步远程服务要求完成,然后才能让你的方法返回。
否则,该方法将启动(异步)请求并继续执行,即返回(因为方法中没有更多指令),因此调用客户端Meteor调用的回调。远程服务请求完成后,Meteor调用已完成,只有您的服务器可以执行某些处理。
您可以使用Meteor.wrapAsync()
包装异步请求,也可以在等待远程服务响应时让其他Meteor方法处理之前添加this.unblock()
。