0
ループ内にあるネストされた約束から約束を返す最良の方法は何ですか?私は、いつどのようにして、約束を入れ子にするのかをどうやって使うのか分かりません。ForEachループ内のJqueryネストされた約束
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
});
ええ、私はちょっと困っています。アップロードヘルパーは.ajax約束を返します。残りのAPI(SharePoint 2013)を呼び出すだけです。私は各ファイルをアップロードしてから、それぞれのドキュメントのlistitemを取得してから、それぞれのlistitemを更新します。チェーンの1つの部分でエラーが発生した場合にエラーを処理または処理する最善の方法は不明です。 – Fab
ええ、それはPromise.all()の欠点です。一つの約束が拒絶されれば、すべてが拒絶される。約束の効用の大部分は、返品データにアクセスした後で確実に操作できることですが、最後の呼び出しから何も返されていないようです。何か動作していないのですか、それともより良いパターンを探していますか? –
ちょうど良いパターンを探していて、ある文書がアップロードに失敗した場合でも続行したいと思いますが、呼び出しの外にループがあるので – Fab