この質問から、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
ここで 2 つの質問:
- fileA から fileH に移動するように修正するにはどうすればよいですか?
- ファイルを解析した
json
後、自己呼び出し関数の後、またはによって返される Promiseelse
の関数内のループ内で変数を操作するコードを配置しますか?then
readFileAsync()