需要一些帮助来升级我处理时事通讯订户的方法,但我真的不知道该怎么做。基本上,我希望能够在出现错误(或正确)时从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)
如果我理解正确的话,我最终应该能够实现一些回调。有人能给我指一个正确的方向来捕捉这种反应吗?
谢谢!
在回调中使用错误和结果对象
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);
}
});
}
});
为了总结其他答案,完整的片段如下所示(我无法测试这个特定的请求,但我认为你明白了):
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);
}
});
})();
}
});
如果你想将远程服务(在这种情况下是Mailchimp)的实际响应(错误/结果)发送到你的客户端,你必须让你的服务器Meteor方法"挂断",等待异步远程服务请求完成,然后才能让你的方法返回。
否则,该方法将启动(异步)请求并继续执行,即返回(因为该方法中没有更多指令),因此调用客户端Meteor调用的回调。一旦远程服务请求完成,Meteor调用就已经完成,只有您的服务器才能执行一些处理。
您可以用Meteor.wrapAsync()
包装异步请求,也许可以在之前添加一个this.unblock()
,让其他Meteor方法在等待远程服务响应时进行处理。
另请参阅:投掷流星。错误未到达客户端