Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 帆+;Braintree:无法将事务详细信息发送到客户端_Javascript_Node.js_Sails.js_Braintree - Fatal编程技术网

Javascript 帆+;Braintree:无法将事务详细信息发送到客户端

Javascript 帆+;Braintree:无法将事务详细信息发送到客户端,javascript,node.js,sails.js,braintree,Javascript,Node.js,Sails.js,Braintree,我正在使用sailsjs和Braintree开发一个应用程序。我正在尝试发送客户所做的所有过去交易的详细信息 这是我的getTransaction操作 getTransaction: function(req, res) { var customerId = req.param('customerId'); var gateway = setUpGateway(); var stream = gateway.transaction.search(function(sear

我正在使用
sailsjs
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);
    });
},
但问题是,如果我直接发送我从braintree服务器得到的响应,它会抛出
循环依赖性错误
。所以,为了克服这个错误,我只从这样的响应中获取我需要的细节

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
返回空数组。那么,我应该怎么做才能返回用户所做的所有交易呢?

完全披露:我在Braintree工作。如果您有任何进一步的问题,请随时与我们的团队联系

迭代器异步执行是正确的。您应该使用节点的流语义来处理请求

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);
  });
},
这将等待所有事务处理完毕后再发送结果

提供有关使用我们的节点客户端库和节点的流API进行搜索的更多信息