javascript - Deepstream.io 中的 dataTransform 在控制台中给出 'Uncaught SyntaxError: Unexpected end of input'

标签 javascript sockets deepstream.io

我正在尝试使用新的 dataTransforms API 操作通过 Deepstream 发送回客户端的数据,但是,我总是得到 Uncaught SyntaxError: Unexpected end of input 在控制台中。可能是为 Deepstream 进行数据库查找花费的时间太长,但我不太确定。

我的相关代码是:

DSServer.set('dataTransforms', [
  {
    topic: DSServer.constants.TOPIC.RECORD,
    action: DSServer.constants.ACTIONS.READ,
    transform: transformRecord
  }
]);

var transformRecord = function (data, metadata) {
  if (metadata.recordName.split('/')[0] === 'team') {
    var new_member_info = [];
    var i = 0;

    _.forEach(data.members, function (members) {
      r.table('user').get(members.user_id).run()
        .then(function (doc) {
          if (doc !== null) {
            new_member_info.push({
              user_id: members.user_id,
              display_name: doc._d.display_name,
              username: doc._d.username
            });

            i += 1;

            if (i === data.members.length) {
              data.members = new_member_info;
              return data;
            }
          }
        })
        .error(function (err) {
          console.error(err);
        });
    });
  } else {
    return data;
  }
};

只要有 READ from a RECORD,它就会检查它是否是从团队记录中读取的。如果它是从团队记录中读取的,它将获取属于该团队的所有成员并将其添加到成员:{}。

当它遍历所有成员并添加有关它们的信息时,它将返回新数据。

那么,知道哪里出了问题吗?

我对 dataTransforms 的理解有误吗?

最佳答案

出于性能原因,所有数据转换都应同步返回结果。

r.table('user').get(members.user_id).run()
        .then(...

但是异步运行并将其值返回给 then 中使用的函数,而不是 dataTransform 函数。无论是否应用转换,始终返回数据也很重要。

如果我理解正确,您的用例是从 RethinkDb 服务器加载大量用户的信息。我可能会推荐使用 list此用例的记录名称或构建 data provider与 RethinkDb 交互。

关于javascript - Deepstream.io 中的 dataTransform 在控制台中给出 'Uncaught SyntaxError: Unexpected end of input',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31540528/

相关文章:

javascript - 我必须在客户端创建记录吗?

javascript - 如何确定 React 中发生错误的位置?

javascript - 动态调整元素后,jQuery Isotope 无法正确重新排列

javascript - 无法通过 LinkedIn 授权

javascript - 为什么我无法在 Javascript 中访问我的 html 元素

c - 管理通信协议(protocol)本地套接字c

c# - 发送 IP 数据包

c - 套接字,从外部域获得空响应

javascript - 在 nginx 后面部署 deepstream.io

javascript - 更改嵌套值时不会触发对记录的订阅