deepstream不会立即更新rethinkdb文档

时间:2016-03-18 03:36:21

标签: deepstream.io

我想在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库的包装器,它只是直接获取或插入数据到数据库以进行测试。

1 个答案:

答案 0 :(得分:2)

在数据库上设置的记录没有强制延迟,但在向其他客户端通知其已更新之前,不需要写入数据库,只能写入缓存。这有助于保持消息延迟非常低。

您可以看到执行here的行。

设置记录然后直接从数据库中查询它似乎是一个奇怪的组合,你能告诉我更多关于你的用例吗?