-1

我在流星同步时遇到问题。我在我的应用程序中使用 paypal/rest-api-sdk-nodejs。基本上我希望客户端通过流星方法向服务器发送信息(卡号,cvc ...)并等待服务器响应(挂起或错误)。在服务器中,我使用 api 创建付款并将其发送到贝宝。

    Meteor.methods
      ({
      todo: function(creditCard)
        {PAYPAL_API.payment.create
           (creditCard, function (err, res) {})
        }
      });

如您所见,如果我想向客户端发送服务器响应它不起作用,API 使用回调函数继续执行,总是 null 有什么建议吗?

谢谢

4

1 回答 1

0

您遇到了典型的 Node.js 做事方式(回调)和 Meteor 做事方式(Fibers)的冲突。

如果你想糊弄过去,你可以这样做:

todo: function(creditCard)
{
   var res = null;
   PAYPAL_API.payment.create(creditCard,
     function (err, res) { t = res; }
   )
   while(!res) { sleep(1); }
   return res;
}

这可能有效,但可能会浪费资源。

围绕 Meteor 反应性重新构建问题会更好。要么创建你自己的反应上下文,要么只使用数据库:(你已经将结果保存到数据库,对吧?)

todo: function(creditCard)
{
   PAYPAL_API.payment.create(creditCard,
     function (err, res) { MyDatabase.Update(blah, res); }
   )
}

现在,您的服务器和客户端都立即“继续”。客户可以通过数据库“收听”他的结果。您可以为每个用户创建一个“频道”,以获取他们的结果。(有点像if (Meteor.isServer) { Meteor.publish('mypayments', -> return Payments.find({user: Meteor.userId})) }

于 2013-07-22T00:16:00.903 回答