Marklogic xdmp.rollback (): невозможно прочитать свойство 'result' из null - PullRequest
0 голосов
/ 25 октября 2018

Я пытался понять функцию отката в ServerSide JavaScript.Я выполнял приведенный ниже запрос JavaScript, который я получил из документации MarkLogic для xdmp.rollback(), и я получил ошибку как

[javascript] TypeError: Невозможно прочитать свойство 'результат'of null.

Запрос:

declareUpdate({explicitCommit: true});
xdmp.documentInsert("/docs/first.json", {"first": 1});
xdmp.documentInsert("/docs/second.json", {"second": 2});
xdmp.rollback();

Результат:

[javascript] TypeError: Невозможно прочитать свойство' result 'из null

Принимая во внимание, что я попытался запустить функцию XQuery для отката xdmp:rollback(), которая работает нормально, не выдавая ошибку.В чем причина?

1 Ответ

0 голосов
/ 26 октября 2018

Пример кода работает.Если вы выполните его, вы заметите, что эти документы не вставляются в базу данных.Вы можете добавить некоторые диагностические сообщения xdmp.log() и найти их в ErrorLog, чтобы доказать, что он выполняет ваш код.

Может показаться, что при выполнении кода через консоль запросов результат выполнения eval будетне полная / ожидаемая полезная нагрузка.

При откате транзакции текущий оператор немедленно завершается, обновления, сделанные любым оператором в транзакции, отбрасываются, и транзакция завершается.

Результатом оператора, оканчивающегося на xdmp:rollback, всегда является пустая последовательность.

Таким образом, вместо возврата объекта ответа со свойством result, ответом eval будет null, ипопытка получить доступ к свойству result приводит к возникновению исключительной ситуации, которая всплывает.

Если вы выполните следующий код:

declareUpdate({explicitCommit: true});
xdmp.commit();

ответ, подобный следующему, возвращается в консоль запросов:

{
 "elapsedCurrent":0.605, 
 "elapsedDiff":-0.307, 
 "isSequence":false, 
 "resultCount":1, 
 "results":[{"type":"Null", "result":"null"}]
}

Но при выполнении примера кода со страницы xdmp.rollback() возвращается следующий ответ, иВы видите, что errorcode отображается на панели результатов консоли запросов:

{
  "error":{
    "evalinfo":"query evaluated as JavaScript", 
    "errorcode":"[javascript] TypeError: Cannot read property 'result' of null", 
    "stacktrace":{"stack":[]}
  }
}
...