2016-03-03 64 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