我的问题是关于Windows商店应用程序上下文中的readTextAsync
和writeTextAsync
。我已经搜索了StackOverflow和MSDN,还搜索了其他广泛的用户。
我的代码如下:
Windows.Storage.ApplicationData.current.roamingFolder.getFileAsync("sample.txt")
.then(
function(samplefile){
return Windows.Storage.FileIO.readTextAsync(samplefile)
},
function(e){},
function(samplefile){
Windows.Storage.FileIO.readTextAsync(samplefile)
}
)
.done(
function(something){ data = something; },
function(){},
function(something){ data = something; }
);
我的问题是大多数时候文件没有被读取。当我调试时,会间歇性地读取它。
这似乎是一个不允许有足够时间完成异步调用的问题。 我是Windows应用程序编程和javascript的新手。
我将不胜感激任何帮助。谢谢。拉维
答案 0 :(得分:1)
你链接许多承诺,你应该在你完成“完成”的那一步有一个错误功能。
通过这种方式,您可以在阅读时查看是否有错误。
你应该写它的方式是:
Windows.Storage.ApplicationData.current.roamingFolder.getFileAsync("sample.txt")
.then(
function(samplefile){
return Windows.Storage.FileIO.readTextAsync(samplefile)
}
)
.done(
function(data){ //do something with your data, like assign to a list },
function(error){ //do something with error },
function(data){ //do something with your data } //progress function,not sure what you want to do with this
);
但是这个调用可能不是你的问题,如果你把这个代码放在普通函数中然后调用它,你将无法看到data
对象,因为它将以异步方式加载。
你必须在完成函数中处理你的数据,因为如果你像你一样将它分配给一个外部变量(你的data
对象),当你尝试时该变量将是空的使用,因为很可能还没有发生完成方法。
答案 1 :(得分:0)
在当时的进度处理程序中,我只是尝试重复调用,以确保完成。
这没有任何意义。它甚至可能导致竞争条件,因为您尝试读取文件,而仍然正在进行中。此外,重复调用不会返回任何内容,并且任务不会与其余任务的流程链接/同步。删除该处理程序。
emptry错误处理程序的原因是我还没有决定在发生错误时该怎么做。
然后你可以省略它。然后,错误会“冒泡”起来,并且可能会陷入其他依赖失败者的承诺中。
我希望将读取的文本存储在
data
中以便以后处理。
但当是“以后”时?您需要确保在完全读取文件之前不开始处理 - 您需要为您的承诺挂钩done
处理程序。在promise链中进行处理,永远不要使用promises的全局/更高范围的变量。如果您需要多次data
,您可以简单地将promise存储在变量中,并附加多个done
处理程序(即使已经解析了promise也可以使用)。