如何从从文本文件检索数据的JavaScript函数返回数组?
我正在用HTML/CSS/JavaScript构建一个Windows8商店应用程序。我通过一个函数从文本文件中读取数据,然后将数据放入数组中。我试图通过函数返回数组,但它不起作用。任何帮助都将不胜感激。我已经附上了我的代码片段如何从从文本文件检索数据的JavaScript函数返回数组?,javascript,html,dom-events,windows-store-apps,winjs,Javascript,Html,Dom Events,Windows Store Apps,Winjs,我正在用HTML/CSS/JavaScript构建一个Windows8商店应用程序。我通过一个函数从文本文件中读取数据,然后将数据放入数组中。我试图通过函数返回数组,但它不起作用。任何帮助都将不胜感激。我已经附上了我的代码片段 // Load user data var DefineUserData = function LoadUserData() { return Windows.Storage.ApplicationData.current.localFolder.getFileAsync
// Load user data
var DefineUserData = function LoadUserData() {
return Windows.Storage.ApplicationData.current.localFolder.getFileAsync(loadfile).done(function (UserFile) {
return Windows.Storage.FileIO.readTextAsync(UserFile).done(function (fileResult) {
var userdata = new Object();
var dataobject = {};
var innercount;
var outercount;
var fileResultByLines = fileResult.split("\n");
for (outercount = 0; outercount <= (fileResultByLines.length - 2) ; outercount++) {
var tempArray = fileResultByLines[outercount].split(",");
dataobject.metrictitle = tempArray[0];
dataobject.numinputs = tempArray[1];
dataobject.inputs = new Array();
for (innercount = 0; innercount <= parseInt(dataobject.numinputs) ; innercount++) {
dataobject.inputs[innercount] = tempArray[innercount + 2];
}
userdata[outercount] = dataobject;
}
return userdata;
});
},
function (errorResult) {
document.getElementById("resbutton1").innerText = errorResult;
})
}
//加载用户数据
var DefineUserData=函数LoadUserData(){
返回Windows.Storage.ApplicationData.current.localFolder.getFileAsync(loadfile.done)(函数(UserFile){
返回Windows.Storage.FileIO.readTextAsync(UserFile).done(函数(fileResult){
var userdata=新对象();
var dataobject={};
var内计数;
var outercount;
var fileresultbyline=fileResult.split(“\n”);
对于(outercount=0;outercount您的DefineUserData
函数返回的是一个Promise
,而不是一个值。另外done
函数不返回任何内容。相反,您需要使用then
函数,而不是DefineUserData
中的done
函数,然后处理添加done
函数(或然后)调用此函数的代码
此外,通过链接然后链接函数而不是嵌套它们,您可以使您的承诺更易于阅读,也更易于使用
当前在办公室的Win7上,因此我无法测试此操作,但请尝试类似于此伪代码的操作。注意然后
函数而不是完成
。最后一个然后
返回您的数据。随后的示例代码片段演示如何调用此操作和处理结果
// modified version of yours
var DefineUserData = function LoadUserData() {
return Windows.Storage.ApplicationData.current.localFolder
.getFileAsync(loadfile)
.then(function (UserFile) {
return Windows.Storage.FileIO.readTextAsync(UserFile);
}).then(function (fileResult) {
var userdata = new Object();
var dataobject = {};
var innercount;
var outercount;
var fileResultByLines = fileResult.split("\n");
for (outercount = 0; outercount <= (fileResultByLines.length - 2) ; outercount++) {
var tempArray = fileResultByLines[outercount].split(",");
dataobject.metrictitle = tempArray[0];
dataobject.numinputs = tempArray[1];
dataobject.inputs = new Array();
for (innercount = 0; innercount <= parseInt(dataobject.numinputs) ; innercount++) {
dataobject.inputs[innercount] = tempArray[innercount + 2];
}
userdata[outercount] = dataobject;
}
return userdata;
},
function (errorResult) {
document.getElementById("resbutton1").innerText = errorResult;
});
}
// some other code...
DefineUserData.done(function (userdata) {
// do something
});
//您的修改版本
var DefineUserData=函数LoadUserData(){
返回Windows.Storage.ApplicationData.current.localFolder
.getFileAsync(加载文件)
.then(函数(用户文件){
返回Windows.Storage.FileIO.readTextAsync(UserFile);
}).then(函数(文件结果){
var userdata=新对象();
var dataobject={};
var内计数;
var outercount;
var fileresultbyline=fileResult.split(“\n”);
对于(outercount=0;outercount Forgetreturn
,使用回调。readTextAsync
是异步的。请参阅(关于ajax,但逻辑相同)。