Каков наилучший способ вернуть обещание от вложенных обещаний, которые находятся внутри цикла? Я не уверен, как использовать, когда и как уйти от вложенности обещаний.Jquery Nested Promises внутри цикла ForEach
function UploadDocuments()
{
_.forEach(documentArray, function (document) {
uploadHelper.uploadFile(document.file, "Doclib").done(function (results) {
//success
uploadHelper.getDocumentListItem(results.d.ListItemAllFields.__deferred.uri).done(function (listItem) {
var payLoad = {
"Title": document.title,
"FileLeafRef": document.title,
};
//success
uploadHelper.updateDocumentListItem(listItem.d.__metadata, payLoad).done(function() {
alert("Successfully Uploaded Document");
}).fail(function() {
alert("Upload failed");
});
}).fail(function() {
alert("get listItem failed");
});
}).fail(function() {
alert("upload failed");
});
});
}
Я хочу, чтобы иметь возможность вызвать эту функцию, вернуть обещание, а затем продолжить обработку. затем
UploadDocuments().then(function(){
//continue
});
Да, я немного озадачен, uploadhelper возвращает обещание .ajax, это просто вызов для отдыха api (SharePoint 2013). Я загружаю каждый файл, затем получаю каждый список документов, а затем обновляю каждый список. Не уверен, что лучший способ связывать или обрабатывать ошибки, если одна часть цепи терпит неудачу. – Fab
Да, это недостаток Promise.all(). Если одно обещание отвергается, то все это отвергается. Большая часть полезности обещания состоит в том, что вы уверены, что операция после того, как у нее будет доступ к возвращаемым данным, но похоже, что вы ничего не возвращаете из последнего вызова? Что-то не работает, или вы просто ищете лучшую картину? –
Просто ищет лучший шаблон и хотел бы продолжить, если один документ не загрузится, но я предполагаю, что это произойдет, поскольку у меня есть цикл вне вызовов – Fab