从这个问题中,我了解到我可以使用forEach
循环或自调用来执行异步 I/O 操作。我不确定为什么它对我不起作用,但是事情的循环部分可以正常工作,而无需调用任何异步函数。
var fileNames = ["fileA", "fileB", "fileC", "fileD", "fileE", "fileF", "fileG", "fileH"];
var json;
(function parseFiles(i) {
console.log(i + " " + fileNames[i]);
var uri = new Windows.Foundation.Uri('ms-appx:///data/' + fileNames[i] + '.json');
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(function (file) {
Windows.Storage.FileIO.readTextAsync(file).then(function (contents) {
json[fileNames[i]] = JSON.parse(contents);
if (i < fileNames.length) {
parseFiles(i+1);
} else {}
});
});
})(0);
我的控制台输出有点奇怪:
0 fileA
1 fileB
0 fileA
2 fileC
1 fileB
3 fileD
2 fileC
3 fileD
这里有两个问题:
- 如何修复它以使其从 fileA 转到 fileH?
- 解析文件后,我是将代码放在
json
自调用函数之后还是在返回的 Promise 函数的else
循环中使用变量?then
readFileAsync()