我想遍历列表并在Windows 8 / Javascript中重命名一些文件。因此,我写了一个名为" renameFile"我在循环中调用此函数,如下所示:
list.forEach(function (value, index, array) {
var filename = index;
var newfilename = index+1;
renameFile(filename, newfilename);
});
function renameFile(filename, newfilename) {
Windows.Storage.ApplicationData.current.localFolder.getFileAsync(filename).then(function (sampleFile) {
sampleFile.renameAsync(newfilename).done(
function complete(result) {
},
function error(error) {
console.log("error" + error);
}
);
});
}
问题是:重命名功能是异步的,有时似乎重命名有效,有时不行:在大多数情况下,只重命名列表的第一个元素。如何告诉循环等待,直到列表中第一个项目的重命名过程完成,然后用第二个,第三个......项目进行操作?
干杯
答案 0 :(得分:0)
我做了快速查找,你运气不好。似乎StorageFolder类只有Asyn函数用于您正在寻找的内容。但它不是结束。
我必须做的最简单的解决方案是使用递归函数。并使用不同的索引调用该函数。
function renameFile(filename, newfilename, list, index) {
Windows.Storage.ApplicationData.current.localFolder.getFileAsync(filename).then(function (sampleFile) {
sampleFile.renameAsync(newfilename).done(
function complete(result) {
renameList(list, index);
},
function error(error) {
console.log("error" + error);
}
);
});
function renameList(list, index) {
if(index >= list.length) return;
renameFile(index, index+1, list, index+1);
}
renameList(list, 0);
它不是很干净但它应该可以工作,这会强制代码同步,因为你在回调中调用。