javascript - 在循环中调用 resolveLocalFileSystemURL
问题描述
我有一个包含文件名的数组。我的代码需要检查每个文件以了解它是需要下载还是已经存在。问题是当我从循环中调用 resolveLocalFileSystemURL 函数时,没有得到正确的文件名,它总是从数组中获取最后一个文件名。任何建议如何与函数调用一起传递正确的文件名?
var currentFile = "";
for (var i = 0; i < files.length; i++)
{
currentFile = files[i];
window.resolveLocalFileSystemURL(cordova.file.dataDirectory + currentFile , ok, downloadFile);
}
function downloadFile() {
....download currentFile....
}
function ok(entry)
{
...
}
解决方案
您可以使用 Array.prototype.map 和 new Promise 将文件转换为一组 Promise 并使用 Promise.all 将所有 Promise 转换为一个将在所有值中解析或在第一个错误时拒绝的 Promise。
Promise.all(
files.map(
function(file){
return new Promise(
function(resolve,reject){
window.resolveLocalFileSystemURL(
cordova.file.dataDirectory + currentFile,
function(file){
resolve(file)
},
function(){
//download file (maybe as promise and return that)
return downloadFile(file);
}
);
}
)
}
)
).then(
function(files){
console.log("ok",files);
}
)
.catch(
function(error){
console.log("error:",error);
}
);
推荐阅读
- javascript - 不显示长度已过期值的记录
- android - React Native 0.60 - 无法使用 react-native run-android 运行应用程序:java.lang.NoClassDefFoundError
- material-ui - Material-UI Menu,MenuItem in a Table 不访问其记录的值,而是 MenuItem 只能访问最后一条记录的值
- javascript - 是否可以重定向不存在的页面?
- reactjs - React 类型化子语法
- python - 如何从一个驱动器/谷歌驱动器下载文件
- javascript - 如何更改多个 Select 的 Select 选项,但在 jQuery 中保持当前选中的 Options
- sql - Access SQL 语句计算与上个月的差异
- python - 创建和调用带有参数的函数堆栈
- python - 如何处理硒(python)中的日期选择器?