Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从从文本文件检索数据的JavaScript函数返回数组?_Javascript_Html_Dom Events_Windows Store Apps_Winjs - Fatal编程技术网

如何从从文本文件检索数据的JavaScript函数返回数组?

如何从从文本文件检索数据的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

我正在用HTML/CSS/JavaScript构建一个Windows8商店应用程序。我通过一个函数从文本文件中读取数据,然后将数据放入数组中。我试图通过函数返回数组,但它不起作用。任何帮助都将不胜感激。我已经附上了我的代码片段

// 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 Forget
return
,使用回调。
readTextAsync
是异步的。请参阅(关于ajax,但逻辑相同)。