遠端, 資料夾遍歷
syncFolderPathList(folderPath, rootPath, parentId, pageNum, folderList, callback) {
if(this.stopCreatingFlag){
Logger.log('stop creat download job');
return;
}
let i = 0, length = folderList.length;
let getSubChild = (cb) => {
let folder = folderList[i];
this.addDownloadInfo(folder);
let info = { ...folder, page: 1, pageNum: pageNum || PAGE_NUM }
this.serialFolderPathList(folderPath, rootPath, parentId, info, () => {
i++;
if (i < length) {
getSubChild(cb);
} else {
cb && cb();
}
})
}
if (i < length) {
getSubChild(() => {
callback && callback();
});
}
}
//folder deep walk, serial handle
serialFolderPathList(folderPath, rootPath, parentId, remotePathInfo, callback) {
if (this.stopCreatingFlag) {
Logger.log('stop creat download job');
return;
}
const { path, page, pageNum } = remotePathInfo;
if (Utils.isEmpty(path) || Utils.isEmpty(page)) {
Logger.error('the folderPathList params is error', remotePathInfo);
return;
}
Utils.getPathList(remotePathInfo, (error, data) => {
if (error) {
Logger.error('get path list error:', error);
return;
}
const { pageInfo, folderList, fileList, current } = data;
// Logger.log('folderPathList:', pageInfo, current.pathDisplay);
if (fileList && fileList.length > 0) {
fileList.forEach(file => {
//create the download job
this.addDownloadInfo(file)
}
let getNextPage = () =>{
if (pageInfo && (pageInfo.page < pageInfo.pageTotal)) {
const { page, pageNum } = pageInfo;
let newPage = page + 1;
let info = { ...current, page: newPage, pageNum: pageNum || PAGE_NUM }
this.serialFolderPathList(folderPath, rootPath, parentId, info, callback);
} else {
callback && callback();
}
}
// folder list serial recurrence start
if (folderList && folderList.length > 0) {
this.syncFolderPathList(folderPath, rootPath, parentId, pageNum, folderList, getNextPage);
} else {
getNextPage();
}
// folder list serial recurrence end
})
}
//folder deep walk,parallel handle
parallelFolderPathList(folderPath, rootPath, remotePathInfo, callback) {
if (this.stopCreatingFlag) {
Logger.log('stop creat download job');
return;
}
const { path, page, pageNum } = remotePathInfo;
if (Utils.isEmpty(path) || Utils.isEmpty(page)) {
Logger.log('the folderPathList params is error', remotePathInfo);
return;
}
Utils.getPathList(remotePathInfo, (error, data) => {
if(error){
Logger.log('get path list error:', error);
return;
}
const { pageInfo, folderList, fileList, current } = data;
let pageLoading = false;
let folderLoading = false;
let count = 0;
let checkEnd = () => {
// ++count == folderList.length && callback();
count++;
if(count == folderList.length){
folderLoading = false;
if(!pageLoading) callback();
}
}
let checkPage = () => {
pageLoading = false;
if(!folderLoading) callback();
}
if(fileList && fileList.length > 0){
fileList.forEach(file => {
//create the download job
this.addDownloadInfo(file);
})
}
// folder list parallel start
let completeFlag = false;
if (folderList && folderList.length > 0) {
folderList.forEach(folder => {
//create the download job
folderLoading = true;
this.addDownloadInfo(folder);
let info = { ...folder, page: 1, pageNum: pageNum || PAGE_NUM }
this.parallelFolderPathList(folderPath, rootPath, info, checkEnd);
completeFlag = true;
})
}
if (pageInfo && (pageInfo.page < pageInfo.pageTotal)) {
pageLoading = true;
const { page, pageNum } = pageInfo;
let newPage = page + 1;
let info = { ...current, page: newPage, pageNum: pageNum || PAGE_NUM }
this.parallelFolderPathList(folderPath, rootPath, info, checkPage);
} else {
// no folders, last page invoke callback
if(!completeFlag) {
callback && callback();
}
}
// folder list parallel end
})
}
相關文章
- 遍歷資料夾的幾種方式
- php遍歷資料夾以及子目錄;PHP
- 【C#】-遍歷資料夾簡約的方式C#
- Python遍歷資料夾常用的兩種方法!Python
- matlab遍歷資料夾下的所有檔案Matlab
- NAS如何掛載遠端資料夾
- 資料遍歷
- 利用 python 遍歷多級資料夾處理不同檔案Python
- indexedDB 遍歷資料Index
- 群暉NAS如何裝載遠端資料夾
- Java遞迴遍歷資料夾及檔案過濾器使用(FileFilter)Java遞迴過濾器Filter
- js資料處理——遍歷JS
- c# 上傳壓縮包 解壓,遍歷資料夾和檔案C#
- ASP.NET 8 AOT 遍歷資料夾獲取檔名稱及時長ASP.NET
- jquery遍歷得到的 Map 資料,jQuery
- ASP.NET Core 中的檔案提供程式 遍歷資料夾讀取檔案資訊ASP.NET
- 【Git/Github】刪除遠端倉庫中的檔案/資料夾Github
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- 寫個批處理指令碼來幫忙幹活---遍歷資料夾&字串處理指令碼字串
- 如何在 Linux 上覆制檔案/資料夾到遠端系統?Linux
- Linux系統複製檔案/資料夾到遠端伺服器Linux伺服器
- R語言遍歷資料夾求取其中所有柵格檔案的平均值R語言
- 資料結構 二叉樹遍歷資料結構二叉樹
- MSSQL遍歷資料庫根據列值查詢資料SQL資料庫
- git fetch批處理,遍歷一個資料夾下的所有子目錄,執行git fetch --allGit
- python對常見資料型別的遍歷Python資料型別
- js的map遍歷和array遍歷JS
- 資料同步——rsync遠端同步
- React中兩種遍歷資料的方法(map、forEach)React
- 利用scp 遠端上傳下載檔案/資料夾
- 遍歷 FlowDocument
- Linuxshell遍歷Linux
- jQuery 遍歷jQuery
- 遠端連線mysql資料庫MySql資料庫
- NAS如何遠端備份資料
- Keil一鍵新增.c檔案和標頭檔案路徑指令碼--可遍歷新增整個資料夾指令碼
- 高效遍歷匹配Json資料,避免巢狀迴圈[轉]JSON巢狀
- 資料結構學習筆記-先序遍歷森林資料結構筆記