我正在尝试使用新的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;
  }
};

每当从记录中读取数据时,它将检查是否是从团队记录中读取的数据。如果是从团队记录中读取的内容,它将获取该团队的所有成员并将其添加到成员:{}。

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

那么,有什么想法可能是错误的吗?

我是否理解dataTransforms错误?

最佳答案

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

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

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

如果我正确理解,您的用例是从RethinkDb服务器加载许多用户的信息。可能我建议为此用例使用记录名的list或构建data provider与RethinkDb进行交互。

10-06 02:50