Javascript sharepoint上载附件,保存冲突错误

Javascript sharepoint上载附件,保存冲突错误,javascript,angularjs,sharepoint,Javascript,Angularjs,Sharepoint,我在尝试将多个附件上载到我的列表时遇到“保存冲突”错误,据我所知,这是因为sharepoint在收到新附件时仍在处理最后一个附件 我认为,在发送下一个文件之前,可能会有某种延迟,但如果所述文件非常大,延迟太短,也可能会失败 这就是我目前上传附件的方式: 使用承诺,$q 上传附件功能: $scope.UploadAttachment = function(file){ var deferred = $q.defer(); setTimeout(function() {

我在尝试将多个附件上载到我的列表时遇到“保存冲突”错误,据我所知,这是因为sharepoint在收到新附件时仍在处理最后一个附件

我认为,在发送下一个文件之前,可能会有某种延迟,但如果所述文件非常大,延迟太短,也可能会失败

这就是我目前上传附件的方式:

使用承诺,$q

上传附件功能:

  $scope.UploadAttachment = function(file){
    var deferred = $q.defer();
    setTimeout(function() {
       // deferred.notify('Saving attachments..');
        readFile(file).done(function (buffer, fileName) {
            var saveFile = new Entry(buffer);
            saveFile.$upload({ID: ID, filename: fileName}, function(u){
                console.log(u);
                deferred.resolve('Success');
            }, function(error){
                console.log(error);
                deferred.reject('Error');
            });
        });
    }, 1000);
    return deferred.promise;
};
ReadFile是一个文件阅读器函数,从中我可以得到一个缓冲区和文件名,这就是我上传到SharePoint的内容

新条目缓冲区中的条目是$resource工厂,具有此$upload功能:

      upload: {
        url: "serverURL/_api/lists/getByTitle('listName')/items(:ID)/AttachmentFiles/add(FileName=':filename')",
        method: "POST",
        transformRequest: [],
        processData: true,
        headers: {
            "accept": "application/json;odata=verbose",
            "X-RequestDigest": function() {return  $("#__REQUESTDIGEST").val()},
            "content-length": function () {
                return arguments[0].data.byteLength;
            }
        }
    }
正如我所说的,这对一个文件或几个小文件非常有效,但是当尝试上载多个大小不同的文件时,我遇到了保存冲突错误


到目前为止,我唯一的想法是某种延迟,但我不知道在哪里或如何实现它,而且我担心这还不够,对此有什么想法吗?

您需要序列化项目更新和项目文件附件REST调用。在前一个呼叫完成之前,不得触发下一个呼叫。与您的实现并行进行调用,导致保存冲突

      upload: {
        url: "serverURL/_api/lists/getByTitle('listName')/items(:ID)/AttachmentFiles/add(FileName=':filename')",
        method: "POST",
        transformRequest: [],
        processData: true,
        headers: {
            "accept": "application/json;odata=verbose",
            "X-RequestDigest": function() {return  $("#__REQUESTDIGEST").val()},
            "content-length": function () {
                return arguments[0].data.byteLength;
            }
        }
    }