2016-03-03 134 views
2

我正在使用Sails JSBraintree开发应用程序。我试图发送客户已经完成的所有交易细节。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返回空数组响应的需要。那么我应该怎么做才能返回用户所做的所有交易?

回答

2

完全披露:我在布伦特里工作。如果您还有其他问题,请随时联系我们的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进行搜索的更多信息。

+0

非常感谢。问题解决了。 – Ricky

相关问题