我有一個遞歸函數,我試圖讓它按順序運行,每次都返回諾言。 該代碼是遞歸的,運行良好,但僅適用於for循環中的第一項。從循環中返回一個承諾
實施例:
- 文件夾:1 - 行
- 文件夾:11 - OK
- 文件夾:111 - 行
- 文件夾:111 - 行
- 文件夾:2 - NOT OK
- 文件夾:12 - 不行
- 所有異步下載都按順序完成。
我認爲這是因爲當我從內部返回承諾時,for循環會中斷。
function CopySubFolders(folder, destFolder) {
// Recursively copy each subfolder
return folder.getFoldersAsync()
.then(function (folderlist) {
if (folderlist.size > 0) {
for (var i in folderlist) {
var replace = Windows.Storage.CreationCollisionOption.replaceExisting;
console.log("create folder: " + folderlist[i].name);
return destFolder.createFolderAsync(folderlist[i].name, replace)
.then(function (newdest) {
return CopySubFolders(folderlist[i], newdest);
});
}
}
else {
return WinJS.Promise.as();
}
});
}
CopySubFolders(folder, self.localFolder)
.then(function() {
completeFunc("Done");
console.log("All asynchronous downloads completed in sequence.");
})
任何想法如何在不中斷for循環的情況下返回promise? PS:如果我使用forEach廁所,它不會被打斷,但是隨後我失去了依次返回文件夾的能力。
實施例:
- 文件夾:1 - 行
- 所有異步下載順序完成。
- 文件夾:11 - OK
- 文件夾:111 - OK
- 文件夾:111 - OK
- 文件夾:2 - 正常
- 文件夾:12 - OK
對不起,我補充說,收集folderlist – 2014-09-01 12:14:21