Sails + Braintree:无法将交易详细信息发送给客户端

我正在开发一个使用Sails JSBraintree的应用程序。 我正试图发送客户已经完成的所有交易细节。

这是我的getTransaction操作

 getTransaction: function(req, res) { var customerId = req.param('customerId'); var gateway = setUpGateway(); var stream = gateway.transaction.search(function(search) { search.customerId().is(customerId); }, function(err, response) { if (err) { return res.serverError(err); } res.send(response); }); }, 

但问题是,如果我直接发送从braintree服务器得到的响应,则会引发circular dependency error 。 所以,为了克服这个错误,我只提取了我需要的这些细节

 getTransaction: function(req, res) { var customerId = req.param('customerId'); var gateway = setUpGateway(); var stream = gateway.transaction.search(function(search) { search.customerId().is(customerId); }, function(err, response) { if (err) { return res.serverError(err); } var transactions = []; response.each(function(err, transaction) { var temp = []; temp.push(transaction.id); temp.push(transaction.amount); temp.push(transaction.createdAt); transactions.push(temp); }); res.send(transactions); }); }, 

但是这里.each函数是asynchronous执行的,因此res.send返回空数组。 那么我应该怎样做才能返回用户所做的所有交易?

充分披露:我在Braintree工作。 如果您还有其他问题,请随时联系我们的支持团队。

你是正确的,迭代器asynchronous执行。 您应该使用Node的stream语义来处理请求

 getTransaction: function(req, res) { var customerId = req.param('customerId'); var gateway = setUpGateway(); var transactions = []; var stream = gateway.transaction.search(function(search) { search.customerId().is(customerId); }); stream.on('data', function (transaction) { transactions.push(transaction); }); stream.on('end', function () { res.send(transactions); }); }, 

这将等待,直到所有交易已经被处理,然后再发送结果。

本页面提供了有关使用我们的Node客户端库和Node的Stream API进行search的更多信息。