Проблема транзакции хранилища данных 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, прежде чем решать эту проблему.

Другие вопросы по тегам