我猜在 record.set(...) 调用和数据库中更新文档之间存在延迟。请注意,该文档最终在 DB 中更新,但不会立即发生。我有涵盖文档更新流程的验收测试,有时它会在检测到更新时通过,有时它会失败,因为它检查数据库的时间还没有更改。即使测试失败,我也可以手动检查数据库并查看文档是否已更新。测试代码使用直接连接rethinkdb来检查更新的文档。我想知道 deepstream 是否真的会延迟记录更新以及如何调整它。请注意,我没有在测试环境中为 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 库的包装,它只是出于测试目的而直接将数据获取或插入到数据库中。