SharePoint 列表中的大型列表检索在工作前失败 4-10 次 (JavaScript)

Large list retrieval in SharePoint list failing 4-10 times before working (JavaScript)

我需要在列表之间复制项目(向每个项目添加更多内容,因此无法使用流),我遇到了一个错误,如果源列表大于 100 个项目,脚本将在查询到源时终止列表(点击按钮时首先发生的事情),大约 4-10 次,然后它就可以工作了。

我正在使用承诺来确保一切按顺序发生,但这似乎不是问题,而是在承诺结构的第一步中查询失败。

它不是查询中的行限制,因为它设置为 1000,行数约为 200。

这是一个示例代码,它适用于少量项目,但当两个列表包含大约 100 个项目时需要多个 运行:

<head>
    <script
  src="https://code.jquery.com/jquery-3.3.1.js"
  integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
  crossorigin="anonymous"></script>
    <script>

    function update() {
        console.log("1")
  var dfd = $.Deferred(function () {
    var updateBtnCLientContextForSourceList = 
      new SP.ClientContext.get_current();
    var getSourceList = updateBtnCLientContextForSourceList
        .get_web()
        .get_lists()
        .getByTitle("SourceList");
    var camlQueryForSourceList = new SP.CamlQuery();
    camlQueryForSourceList.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' +
      '<Value Type=\'Number\'>1</Value></Geq></Where></Query><RowLimit>4000</RowLimit></View>');
    var SourceListtStore = getSourceList.getItems(camlQueryForSourceList);
    updateBtnCLientContextForSourceList.load(SourceListtStore);
    updateBtnCLientContextForSourceList.executeQueryAsync(
      function () {
        dfd.resolve(SourceListtStore);
      },
      function (sender, args) {
        dfd.reject(args);
      }
    );
  });
         console.log("2")
  return dfd.promise();
}

acadcount = 0;

function check() {
  update()
  .then(
    function (SourceListtStore) {
         console.log("3")
      acadcount = SourceListtStore.get_count()
         console.log("4")
      var dfd = $.Deferred(
        function () {
          var updateBtnCLientContextForWeeksAllocated = 
            SP.ClientContext.get_current();
          var getWeeksAllocated = 
            updateBtnCLientContextForWeeksAllocated
              .get_web()
              .get_lists()
              .getByTitle("Weeks Allocated");
          var camlQueryForWeeksAllocated = new SP.CamlQuery();
          camlQueryForWeeksAllocated.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' +
            '<Value Type=\'Number\'>1</Value></Geq></Where></Query><RowLimit>1000</RowLimit></View>');
          var weeksAllocatedListStore = 
            getWeeksAllocated.getItems(camlQueryForWeeksAllocated);
          updateBtnCLientContextForWeeksAllocated.load(weeksAllocatedListStore);
          updateBtnCLientContextForWeeksAllocated.executeQueryAsync(
            function () {
              dfd.resolve(weeksAllocatedListStore);
            },
            function (sender, args) {
              dfd.reject(args);
            }
          );
        }
      );
         console.log("5")
      return dfd.promise()
    }
  ).then(
    function (waListStore) {
         console.log("6")
      if (waListStore.get_count() === acadcount) {
           console.log("7")
        alert("All items have been copied")
      }
      else {
           console.log("8")
        alert("Please try again")
      }
    }
  );
}

    </script>


</head>

<body>
    <button onClick="check()">Check</button>


</body>

源列表:2 项,周 allocated:3 项

来源列表:109 项,周 allocated:1 项

来源 list:109 项,周 allocated:100 项

所以我假设脚本失败时 promise.return 在 .resolve 完成之前 运行ning 是正确的吗?如果可以,我该如何解决这个问题?

页面在 JS 有机会完全执行大量项目之前重新加载,禁用了按钮点击刷新,现在工作正常。