У меня есть Promise.all()
, который возвращается, когда все мои обещания о загрузке завершены, загрузки в основном состоят из нескольких изображений и выполняются с помощью Cordova FileTransfer . Я пытаюсь добавить возможность отменить оставшиеся загрузки в списке URL-адресов, который передается на Promise.all()
. Я попробовал несколько способов сделать это, но все равно всегда загружаются остальные элементы.
Как мой код прямо сейчас:
async downloadFunction(arrayToDownload: Object[]): Promise<void[]> {
let loading = await this.loadingController.create({
message: 'Touch backgroud to cancel',
backdropDismiss: true
});
await loading.present();
const fileTransfer: FileTransferObject = this.transfer.create();
let canceled: boolean = false;
loading.onDidDismiss().then(obj => {
console.log(obj); // obj.role will be = 'backdrop' if clicked in background
if (obj.role === 'backdrop') {
console.log('canceled');
//fileTransfer.abort(); -> Tried to abort filetransfer here first, but it seems that it need to be fired during download.
canceled = true;
return;
}
});
return Promise.all(arrayToDownload.map(element => {
if (canceled === true) {
return; // Added a return here, so it would skip the rest, but didn't work
}
if (element != undefined) {
// Get data from URL and do other preparations
//...
return fileTransfer.download(encodedURI, this.file.externalDataDirectory + 'randomFolder').then(entry => {
return;
}, error => {
console.log("Error while downloading image: ", error);
return;
}).catch(error => {
console.log("Error while downloading image: ", error);
return;
});
} else {
throw new Error("image url not available");
}
})).then(() => {
loading.dismiss();
return [];
});
}