将来自服务器的回调集成到流星/节点方法中

Integrating a callback from the server into a meteor/node method

本文关键字:流星 节点 方法 集成 服务器 回调 将来      更新时间:2023-09-26

需要一些帮助来升级我处理时事通讯订户的方法,但我真的不知道该怎么做。基本上,我希望能够在出现错误(或正确)时从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方法在等待远程服务响应时进行处理。

另请参阅:投掷流星。错误未到达客户端