我试图使用新的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?
发布于 2015-07-21 14:50:15
由于性能原因,所有数据转换都需要同步返回结果。
r.table('user').get(members.user_id).run()
.then(...但是,它异步运行,并将其值返回给then中使用的函数,而不是dataTransform函数。无论是否应用了转换,始终返回数据也是至关重要的。
如果我正确理解它,您的用法是从RethinkDb服务器加载多个用户的信息。我可以建议对此使用记录名的列表或构建一个与RethinkDb交互的数据提供者。
https://stackoverflow.com/questions/31540528
复制相似问题