[英]Windows 8 Javascript asynchronous programming
我想遍歷列表並重命名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);
}
);
});
}
問題是:重命名函數是異步的,似乎重命名有時起作用,有時卻不起作用:在大多數情況下,僅列表的第一個元素被重命名。 我如何告訴循環等待,直到列表中第一個項目的重命名過程完成,然后再處理第二個,第三個...項目?
干杯
嗯,我做了一個快速查找和你的運氣了。 這似乎是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);
它不是很干凈,但是應該可以工作,因為您是從回調中調用的,因此這將強制代碼同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.