Windows 8 Javascript中CreateFileAsync的文件指针未定义
使用Visual Studio Express在Javascript中编写Windows 8应用程序。我不确定我是否丢失了链接依赖项或其他东西,但我给了我的游戏用户将他们的进度保存到文件中的能力(至少这是我的想法)。然而,当我运行下面的代码时,似乎即使我可以看到文件,文件指针仍然是未定义的。看到我丢了什么吗Windows 8 Javascript中CreateFileAsync的文件指针未定义,javascript,windows-8,Javascript,Windows 8,使用Visual Studio Express在Javascript中编写Windows 8应用程序。我不确定我是否丢失了链接依赖项或其他东西,但我给了我的游戏用户将他们的进度保存到文件中的能力(至少这是我的想法)。然而,当我运行下面的代码时,似乎即使我可以看到文件,文件指针仍然是未定义的。看到我丢了什么吗 var myStats = new Array(); myStats[0] = myTitle; myStats[1] = currPage; myStats[2] = currStep;
var myStats = new Array();
myStats[0] = myTitle;
myStats[1] = currPage;
myStats[2] = currStep;
myStats[3] = currTune;
myStats[4] = musicon;
myStats[5] = gameComplete;
var save01File = null;
Windows.Storage.KnownFolders.documentsLibrary.createFileAsync("Asave01.dat", Windows.Storage.CreationCollisionOption.replaceExisting).done(
function (file) {
save01File = file;
},
function (error) {
WinJS.log && WinJS.log(error, "sample", "error");
});
Windows.Storage.FileIO.writeLinesAsync(save01File, myStats).done(
function () {
},
function (error) {
WinJS.log && WinJS.log(error, "sample", "error");
errCount++;
});
if (errCount == 0) {
fileMenuTitle.text = "File Saved - Click Cancel";
fileMenuTitle.text = fileMenuTitle.text + "\nto Return or Select Another File to Load";
fileMenuTitle.color = "green";
}
else {
fileMenuTitle.text = "There was an error saving that file.";
fileMenuTitle.text = fileMenuTitle.text + "\nPlease Make Another Selection.";
fileMenuTitle.color = "firebrick";
}
您需要在此处使用承诺模式:
var myStats = new Array();
myStats[0] = myTitle;
myStats[1] = currPage;
myStats[2] = currStep;
myStats[3] = currTune;
myStats[4] = musicon;
myStats[5] = gameComplete;
var save01File = null;
Windows.Storage.KnownFolders.documentsLibrary.createFileAsync("Asave01.dat", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
save01File = file;
return Windows.Storage.FileIO.writeLinesAsync(file, myStats);
}).done(function() {
fileMenuTitle.text = "File Saved - Click Cancel";
fileMenuTitle.text = fileMenuTitle.text + "\nto Return or Select Another File to Load";
fileMenuTitle.color = "green";
}, function (error) {
WinJS.log && WinJS.log(error, "sample", "error");
fileMenuTitle.text = "There was an error saving that file.";
fileMenuTitle.text = fileMenuTitle.text + "\nPlease Make Another Selection.";
fileMenuTitle.color = "firebrick";
});
async
-这是这里的关键。你明白那是什么意思吗?发生异步操作时,只能在完成函数中使用该操作的结果。你不能在你调用的下一个函数中使用它。我认为有一种方法可以链接,使下面的函数可以“等待”直到前面的函数完成?如果不是,那么我不清楚如何“写入”数组?是否在初始创建的“函数(文件)”中执行写函数?是的,在创建文件的成功处理程序中或在从那里调用的函数中执行写操作。那是你唯一能做到的地方。Javascript没有等待任何东西的能力。这是异步编程。您在成功回调中完成了工作。非常感谢。现在,如果我能让读数正常工作,我将遵循与上面相同的模式,但怀疑我认为它的线条与我得到的线条不一样。有趣的是,这么多的游戏编程往往是框架而不是游戏:-)