2013-04-16 46 views
1

我想循环访问列表并重命名Windows 8/Javascript中的几个文件。因此,我写了一个名为“renameFile”功能,我调用这个函数在一个循环中,像这样:Windows 8 Javascript异步编程

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

嗯,我做了一个快速查找和你的运气了。看起来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); 

这不是很干净,但它应该工作,这将迫使代码是同步的,因为你从一个回调中调用。