Sails + Braintree:无法将交易详情发送给客户端
问题描述:
我正在使用Sails JS
和Braintree
开发应用程序。我试图发送客户已经完成的所有交易细节。Sails + Braintree:无法将交易详情发送给客户端
这里是我的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);
});
},
但问题是,如果我直接发送这是我从布伦特里服务器得到的回应,它抛出的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
功能,因此res.send
返回空数组响应的需要。那么我应该怎么做才能返回用户所做的所有交易?
答
完全披露:我在布伦特里工作。如果您还有其他问题,请随时联系我们的support团队。
你说得对,迭代器是异步执行的。您应该使用节点的流语义来处理请求
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);
});
},
这将等到所有事务处理完成后再发送结果。
This page提供了有关使用我们的Node客户端库和Node的Stream API进行搜索的更多信息。
非常感谢。问题解决了。 – Ricky