在调用程序中获取函数从文件中读取的值:Windows应用商店JavaScript应用程序
Get value read from file by a function back in caller : Windows Store JavaScript App
我已经编写了以下代码[Windows Store JavaScript App
]:
function get_ver(){
get_text("verfile");
// how to get value read by get_text [i.e. variable filedata] in this function???
}
function get_text(filepath) {
var p = "ms-appx:///" + filepath;
var uri = new Windows.Foundation.Uri(p);
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri)
.then(function (sampleFile) {
return Windows.Storage.FileIO.readTextAsync(sampleFile);
}).done(function (filedata) {
document.getElementById("t").innerHTML = filedata;
// want to return filedata to get_ver()
}
);
}
我想访问从get_ver()内的"verfile"(即变量filedata的值)读取的数据,该数据可以作为返回值。如何做到这一点?
我不希望将值设置为元素的innerHTML,而是希望将其返回给调用者,以便对其进行进一步处理。
因为get_text方法正在调用异步API来完成它的工作,所以它也变成了异步API。要从中返回一个值,则需要返回该值的promise。最简单的方法是从链中最后一个然后返回promise,然后从最内部的已完成处理程序返回最终值。
也就是说,这样写你的方法:
function get_text(filepath) {
var p = "ms-appx:///" + filepath;
var uri = new Windows.Foundation.Uri(p);
return Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri)
.then(function (sampleFile) {
return Windows.Storage.FileIO.readTextAsync(sampleFile);
}).then(function (filedata) {
document.getElementById("t").innerHTML = filedata;
return filedata;
});
}
请注意,我将"done"改为"then",这样我们就可以从链中获得另一个承诺。我在最里面的已完成处理程序中插入了一个return filedata,并在第一个异步调用之前插入了一条return语句。这样做的目的是从整个链返回一个promise,而该promise的实现值(根据then的定义)是最后完成的处理程序的返回值。(如果你想对此有更多的解释,我的书的第二版预览,http://aka.ms/brockschmidtbook2)有一个完整的附录,叫做"揭开承诺的神秘面纱"
因为get_ver现在收到了一个promise,所以您只需向该promise添加一个已完成的处理程序(使用done now,因为您处于链的末尾):
function get_ver(){
get_text("verfile").done(function (filedata) {
// Use filedata
});
}
这有道理吗?这是从本身使用异步API的函数返回值的通用模式,这使得这些函数也是异步的。
Kraig
相关文章:
- 如何添加CSS&JavaScript进入Windows窗体应用程序C#.net
- Windows 8 Javascript应用程序XML对象
- 在JavaScript Windows 8应用程序中设置桌面壁纸
- 使用Javascript和html5登录Windows应用程序的Facebook
- Bing语音和Bing地图在Windows 8应用商店应用程序中冲突
- 是否可以使用推送通知Windows 8 Metro应用程序's使用Javascript
- 如何在Windows上用javascript构建本机应用程序
- 在Windows Phone应用程序中激活javaScript
- 无法在Windows 10 Cordova应用程序中从Web视图进行ajax调用
- 在Windows Metro风格的Javascript应用程序中读取文件内容
- 如何使用SAML和C#调试Windows Phone 8.1应用程序的Javascript代码
- 如何在Windows Phone 8.1应用程序中在C#和Javascript之间传递数据或通信
- Windows 8市场应用程序JS,访问远程XML文件
- Windows 8应用程序正在运行,现在得到0x800a1391-JavaScript运行时错误:'WinJS&
- 如何获取运行我的 Web 应用程序的用户的 Windows 登录用户名
- 在 Windows 现代(地铁)UI 应用中存储图像文件和音频文件的方法是什么?
- Windows 通用应用部分数据
- Windows 8 HTML5 JavaScript 应用程序中向左滑动的事件名称是什么
- 捕获在Windows应用程序中启动其他应用程序的用户事件
- C# WebView 不理解 JavaScript 调用 alert()(Windows 8 XAML 应用程序)