Я загружаю вложения с помощью rest API в SharePoint 2013, для этого мне нужно вызвать метод загрузки вложений в синхронном режиме.
Потому что, если я вызываю асинхронный метод загрузки вложения, я получаю ошибку конфликта 409.
Как связать объекты обещания в цикле for.i.e. Я хочу вызвать второй метод вложения при первом успешном вложении и т.д.
Пожалуйста, помогите мне в лучшем подходе к цепочке обещаний в цикле for.
Распространенный способ сохранения вложений:
var saveFileAngularJS = function (file, url) {
var deferred = $q.defer();
getFileBuffer(file).then(function (fileArrBuffer) {
$http({
method: 'POST',
url: baseUrl + url,
headers: {
'Accept': 'application/json;odata=verbose',
'Content-Type': undefined,
'X-RequestDigest': jQuery("#__REQUESTDIGEST").val()
},
data: new Uint8Array(fileArrBuffer),
transformRequest: []
}).then(function successCallback(data) {
deferred.resolve(data);
alert('Successfully saved.', data);
}, function errorCallback(error) {
deferred.reject(error);
alert('Failed to save!!!.', error);
});
});
return deferred.promise;
};
Вызов метода:
for (var i = 0; i < $scope.files.length; i++) {
var file = $scope.files[i]._file;
var response = lssDealService.insertAttachment(transactionId, file);
}
var insertAttachment = function (dealId, file) {
var attachmentUrl = listEndPoint + "/GetByTitle('TransactionList')/GetItemById(" + dealId + ")/AttachmentFiles/add(FileName='" + file.name + "')";
return baseService.saveFile(file, attachmentUrl);
};
Вставка вложения вызовет метод SaveFile.
Я хочу запустить этот цикл for последовательно, после завершения цикла мне нужно обработать все обещания и отобразить пользователю сообщение об успешном выполнении.
Пожалуйста, помогите мне написать цепочку обещаний эффективным способом.