Я предполагаю, что между вызовом record.set(...) и обновлением документа в БД есть задержка. Обратите внимание, что документ, наконец, обновляется в БД, но это происходит не сразу. У меня есть приемочные тесты, которые охватывают процесс обновления документа, и иногда он проходит, когда обнаруживается обновление, иногда он терпит неудачу из-за времени, когда он проверяет БД, в которой еще нет изменений. Даже когда тест не пройден, я могу проверить БД вручную и увидеть, что документ обновлен. Тестовый код использует прямое подключение к базе данных 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, которая просто получает или вставляет данные непосредственно в БД для целей тестирования.