javascript - sails +布伦特里 : Unable to send the transactions details to client

标签 javascript node.js sails.js 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 服务器获得的响应,它会抛出循环依赖错误。因此,为了克服这个错误,我只从这样的响应中获取我需要的详细信息

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 工作。如果您还有任何疑问,请随时联系我们的support团队。

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

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 进行搜索的更多信息。

关于javascript - sails +布伦特里 : Unable to send the transactions details to client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35777318/

相关文章:

javascript - 如何以等距方式在曲线上使用setLineDash?

javascript - 使用 jQuery .on() 绑定(bind)委托(delegate)事件时,直接子级的正确选择器是什么

javascript - 即将解决模拟点击 H​​ref anchor ?

javascript - CSS 不会使用 Node.js 加载到我的 HTML 代码中

javascript - 如何在运行时从上传列表中跳过或删除某些文件

Angular-cli 与 Sailsjs 集成

javascript - sails-auth 模块给出 "Cannot read property ' loadStrategies' of undefined"

javascript - 从 javascript 显示 html

node.js - 与断言(assert.ok)相比,assert.equal有什么优势吗?

node.js - 使用 Promise 进行流量控制