1

我想遍历一个列表并重命名 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);
            }
            );
    });
}

问题是:重命名函数是异步的,似乎有时重命名有效,有时无效:在大多数情况下,只有列表的第一个元素被重命名。我怎样才能告诉循环等待,直到列表中第一项的重命名过程完成,然后与第二个,第三个,......项目一起去?

干杯

4

1 回答 1

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);

它不是很干净,但应该可以工作,这将强制代码同步,因为您是从回调中调用的。

于 2013-04-16T21:36:22.630 回答