JavaScript 在 MarkLogic 中调用交易

JavaScript invoke transactions in MarkLogic

我有xml个文档:

<product-inventory>
  <product>
    <name>shoe</name>
    <price>100</price>
    <date>2020-05-31</date>
  </product>
  <product>
   <name>dress</name>
    <price>100</price>
    <date>2020-06-01</date>
  </product>
  <product>
   <name>dress</name>
    <price>200</price>
    <date>2020-06-02</date>
  </product>
</product-inventory>

我写了一个程序来更新第二个 price 元素,审计这样的更新,最后检索更新的文档。 该程序包含三个功能。当程序到达最后的检索步骤时,我仍然看到旧文档。如果我打开另一个 window,我会看到更新的文档。

<product-inventory>
  <product>
    <name>shoe</name>
    <price>100</price>
    <date>2020-05-31</date>
  </product>
  <product>
   <name>dress</name>
    <price>700</price>
    <date>2020-06-01</date>
    <audit>
      <modifiedBy>admin</modifiedBy>
      <modifiedDate>2020-06-02T16:12:14.9664853-04:00</modifiedDate>
    </audit>
  </product>
  <product>
   <name>dress</name>
    <price>200</price>
    <date>2020-06-02</date>
  </product>
</product-inventory>

函数要点:

function  updateDoc() {
**************
   xdmp.nodeReplace(
**************
};

function auditHistory() {
*********************
   xdmp.nodeInsertAfter(
*********************
};

function retrieveDoc() {
  return fn.collection('product')
};

xdmp.invokeFunction(function(){
  declareUpdate();
  updateDoc();
  auditHistory();
}),
retrieveDoc();

有人能解释一下为什么当程序到达 retrieveDoc() 时我仍然看到旧文档吗?

我认为您需要将 retrieveDoc() 包装到另一个 xdmp.invokeFunction 中才能看到更新后的文档。

xdmp.invokeFunction(() => {
  return retrieveDoc()
})