0

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

// 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;
    })
}
4

1 回答 1

0

您的DefineUserData函数返回 a Promise,而不是值。此外done,函数不返回任何内容。相反,您需要使用then函数而不是done函数DefineUserData,然后将done函数(或then)添加到调用此函数的代码中。

then此外,您可以通过链接函数而不是嵌套函数来使您的 Promise 更易于阅读和使用。

目前在办公室使用 Win7,所以我无法对此进行测试,但请尝试类似于此伪代码的内容。注意then函数而不是done. 最后一个then返回您的数据。之后的示例片段来说明调用它并处理结果。

// 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
});
于 2013-06-19T22:01:09.240 回答