UWP JavaScript加载本地文本文件,没有“异步调用”
我需要创建一个函数来加载Windows通用JavaScript应用程序中的文本文件,该文件返回的字符串不是“承诺”。UWP JavaScript加载本地文本文件,没有“异步调用”
这段代码将返回一个“promise”而不是一个字符串,所以有一种方法可以将它嵌入到一个函数中(它将等待并返回一个字符串),或者完成其他加载文件的方式。
function getFileContentAsync(fileName) {
var fileName = new Windows.Foundation.Uri("ms-appx:///" + fileName);
return Windows.Storage.StorageFile.getFileFromApplicationUriAsync(fileName).then(function (file) {
return Windows.Storage.FileIO.readTextAsync(file);
});
});
//usage
getFileContentAsync(filename).then(function(fileContent){
...
});
我需要一个函数,它将接收一个fileName并返回一个String;
正如在评论中提到的那样,当你处理异步调用,尤其是承诺时,你应该改变你的架构:特别是你的内部函数应该返回一个承诺而不是价值。
function getFileContentAsync(fileName) {
var fileName = new Windows.Foundation.Uri("ms-appx:///" + fileName);
return Windows.Storage.StorageFile.getFileFromApplicationUriAsync(fileName).then(function (file) {
return Windows.Storage.FileIO.readTextAsync(file);
});
});
//usage
getFileContentAsync(filename).then(function(fileContent){
...
});
在实践中,您也有责任管理可能的错误状态,特别是在处理文件系统时。
getFileContentAsync(filename).then(function processContent(fileContent){
...
}, function processError(error){
...
});
为什么它应该返回一个“承诺”而不是“价值”,你没有给出任何解释。我真正想要的是一个字符串,那么为什么我会让它返回一个“承诺”,如果每次调用都会导致重复的代码。 –
1.当您使用***异步功能时,您已经在尽快处理承诺。您正在调用的函数(例如,readTextAsync)会返回promise,而不是值。 2.当你调用函数时,该值根本不存在,这就是为什么你必须使用带回调函数的promise。 – Konstantin
有没有加载文件的方法,不使用承诺? –
可能重复[如何从异步调用返回响应?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an - 异步调用) –