Проблема транзакции хранилища данных gcloud с использованием nodejs
Я использую nodejs, чтобы связаться с хранилищем данных Google. Это мой код:
dataset.runInTransaction(function(transaction, done,err) {
// From the `transaction` object, execute dataset methods as usual.
// Call `done` when you're ready to commit all of the changes.
transaction.save(entities, function(err) {
if(err){
console.log("ERROR TRNASCTION");
transaction.rollback(done);
return;
}else{
console.log("TRANSACTION SUCCESS!");
done();
}
});
});
Если сохранение не было успешным, я бы хотел, чтобы транзакция откатилась, и если это так, я хочу, чтобы она была зафиксирована. Проблема, с которой я сталкиваюсь, заключается в том, что ни один из них, кажется, не работает, просто нет вывода на консоль. В мою базу данных ничего не отправляется, поэтому я бы предположил, что хотя бы условие 'if(err)' будет выполнено, но оно не выполняется. Я новичок в glcoud, поэтому я не уверен, что я здесь что-то не так делаю? Я следую за документом по адресу https://googlecloudplatform.github.io/gcloud-node/.
1 ответ
В контексте транзакции save
Метод на самом деле не нуждается в обратном вызове. Вещи, которые вы хотите сохранить, стоят в очереди, пока вы не позвоните done()
, призвание done
совершит транзакцию.
Затем вы можете обрабатывать ошибки из операции фиксации во второй функции, переданной runInTransaction
, См. https://googlecloudplatform.github.io/gcloud-node/ для примеров этого.
-
Просто упомяните об этом, поскольку это относится к части отката: https://github.com/GoogleCloudPlatform/gcloud-node/issues/633 - мы ждем обновления API Datastore, прежде чем решать эту проблему.