Couchbase возвращает ошибку при успехе
Я использую couchbase для хранения профилей пользователей и их балансов. Как вы можете видеть из приведенного ниже кода, я пытаюсь спамить запросы couchbase, чтобы обеспечить долговечность сайта. В базе данных есть пользователь с идентификатором 'u:: 23' и его баланс равен '6'. Я ожидаю, что скрипт будет вычитать баланс столько раз, сколько он будет положительным, но проблема в том, что couchbase просто возвращает 3 ошибки, и баланс превращается из "6" в "0". Если я попытаюсь убрать интервал и просто выйду из простой функции, все будет работать как положено: баланс превратится из "6" в "4". Вы когда-нибудь испытывали ту же проблему?
Код:
const couchbase = require('couchbase');
const cluster = new couchbase.Cluster('couchbase://localhost');
console.log('Connecting to btc');
let bucket = cluster.openBucket('btc', err => {
if (err) {
console.log(err);
} else {
console.log('Connected to btc');
let timer = setInterval(() => {
bucket.getAndLock('u::23', (err, doc) => {
if (err) return console.log(err);
if (doc.value.balance <= 0) {
return clearInterval(timer);
}
console.log(doc.cas);
doc.value.balance -= 2;
bucket.replace('u::23', doc.value, {
cas: doc.cas,
persist_to: 1
}, (err, doc) => {
if (err) return console.log(err);
console.log('----------', 'DONE', '----------');
});
});
}, 90);
}
});
Выход:
Connecting to btc
Connected to btc
CouchbaseCas<1505835358213832704>
CouchbaseCas<1505835358303092736>
{ CouchbaseError
at _endureError (/var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1004:19)
at /var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1037:18
message: 'Durability requirements failed',
code: undefined,
innerError:
{ CouchbaseError
message: 'The key already exists in the server. If you have supplied a CAS then the key exists with a CAS value different than specified',
code: 12 } }
CouchbaseCas<1505835358393335808>
{ CouchbaseError
at _endureError (/var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1004:19)
at /var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1037:18
message: 'Durability requirements failed',
code: undefined,
innerError:
{ CouchbaseError
message: 'The key already exists in the server. If you have supplied a CAS then the key exists with a CAS value different than specified',
code: 12 } }
{ CouchbaseError
at _endureError (/var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1004:19)
at /var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1037:18
message: 'Durability requirements failed',
code: undefined,
innerError:
{ CouchbaseError
message: 'The key already exists in the server. If you have supplied a CAS then the key exists with a CAS value different than specified',
code: 12 } }