我想在record.set(...)调用和文档在DB中更新之间存在延迟。请注意,文档最终在DB中更新,但它不会立即发生。我有验收测试,涵盖文档更新流程,有时它会在检测到更新时通过,有时它会失败,因为它检查数据库时它还没有变化。即使测试失败,我也可以手动检查数据库并查看文档是否更新。测试代码使用直接连接到rethinkdb来检查更新的文档。我想知道深流是否实际上有延迟记录更新以及我如何调整它。请注意,我没有为测试环境中的deepstream启用redis。要更好地理解案例,请查看下面的代码段。
考虑我有一个rpc端点,如:
ds.rpc.provide('update-document', function (data, response) {
var record = ds.record.getRecord(`document/${data.id}`);
record.whenReady(function () {
user.set('field','value');
response.send({ status: 'UPDATED' });
})
});
测试代码如下:
var document = {...}; // document properly created and saved in DB here
client.rpc.make('update-document', document, function (error, result) {
// we hit successfully, so the call ended well
assert.equal(result.status, 'UPDATED');
rethinkDBService.get(`document/${document.id}`).then(function (documents) {
assert.equal(documents.length, 1);
var updatedDocument = documents[0]._d;
// problem here: sometimes it has "field" property with 'value'
// sometimes it doesn't
assert.equal(updatedDocument.field, 'value');
done();
})
.catch(console.log)
})
rethinkDBService只是我的rethinkdb库的包装器,它只是直接获取或插入数据到数据库以进行测试。
答案 0 :(得分:2)
在数据库上设置的记录没有强制延迟,但在向其他客户端通知其已更新之前,不需要写入数据库,只能写入缓存。这有助于保持消息延迟非常低。
您可以看到执行here的行。
设置记录然后直接从数据库中查询它似乎是一个奇怪的组合,你能告诉我更多关于你的用例吗?