0
從循環內嵌套承諾返回承諾的最佳方式是什麼?我不確定如何使用何時或如何擺脫嵌套承諾。Jquery在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)。我正在上傳每個文件,然後獲取每個文檔listitem,然後更新每個listitem。如果鏈條的一部分失效,不確定鏈接或處理錯誤的最佳方式。 – Fab
是的,那是Promise.all()的缺點。如果一個承諾被拒絕,那麼整個事情都會被拒絕。承諾的大部分用途是在獲得返回數據後確定操作,但似乎並沒有從上次調用中返回任何內容?有些東西沒有工作,或者你只是在尋找更好的模式? –
只是尋找一個更好的模式,並希望繼續如果一個文件上傳失敗,但我想這將因爲我有呼叫之外的循環 – Fab