Множественная загрузка Nativescript в одном go с использованием asyn c / await и загрузчика nativescript - PullRequest
0 голосов
/ 14 июля 2020

Кто-нибудь может с этим помочь? Я думаю, что проблема в функции finishDownload, потому что она всегда возвращается до загрузки файлов, и я не могу использовать ожидание перед методом downloadManager. Если есть лучший способ сделать это, пожалуйста, дайте мне знать. Я использую загрузчик nativescript для параллельной загрузки нескольких файлов

let getFiles = async (paths) => {

let downloader = (args) => {
    
    return new Promise((resolve, reject) => {

        downloadManager = new Downloader();

        let promises = [];
    
        const documents = fs.knownFolders.documents();
        
        args.forEach((data, index) => {
    
            let file = exports.getFileName(data.pageUrl.downloadURL);
            let url = data.pageUrl.downloadURL;
    
            //check if this file was downloaded already
            const path = fs.path.join(documents.path,file);
            const exists = fs.File.exists(path);
    
            if (exists === false) { 
    
                let promise = downloadManager.createDownload({
                        path: fs.knownFolders.documents().path,
                        fileName: file,
                        url:url
                    });
        
                promises.push(promise);
                
            }
    
        });
    
      
        resolve(promises);
    })
    
}

let finishDownload = async (ids) => {
    page.bindingContext.downloadedFiles._array.splice(0);
    ids.forEach((data,index) => {
        downloadManager
        .start(data, (progressData) => {
            // console.log(data+" id: download value,",progressData.value);
            // console.log(data+" id: download speed,",progressData.speed);
        })
        .then(completed => {
            console.log(`downloaded File path: ${completed.path}`);
    
        }).catch(error => {
            console.log("downloadManager error: ",error.message);
        });
    })
    
   //this is always returned, even before files are downloaded.
    return "done";
}

let y = await downloader(paths);

let x = await finishDownload(y);

if (x === "done") {

    console.log("are we now finished!!!!!!!!");

    hideLoading();
        
    console.dir("all files are now downloaded and about to be saved!!!");

    let file = exports.getFileName(page.navigationContext.pages[0].pageUrl.downloadURL);
    
    //check if this file was downloaded already
    let documents = fs.knownFolders.documents();

    const path = fs.path.join(documents.path,file);
    const exists = fs.File.exists(path);
  

    if (exists) {
         modalContentButton.class = "modal-content-button-active";
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...