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;

+0

可能重复[如何从异步调用返回响应?](http://*.com/questions/14220321/how-do-i-return-the-response-from-an - 异步调用) –

正如在评论中提到的那样,当你处理异步调用,尤其是承诺时,你应该改变你的架构:特别是你的内部函数应该返回一个承诺而不是价值。

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){ 
    ... 
}); 
+0

为什么它应该返回一个“承诺”而不是“价值”,你没有给出任何解释。我真正想要的是一个字符串,那么为什么我会让它返回一个“承诺”,如果每次调用都会导致重复的代码。 –

+0

1.当您使用***异步功能时,您已经在尽快处理承诺。您正在调用的函数(例如,readTextAsync)会返回promise,而不是值。 2.当你调用函数时,该值根本不存在,这就是为什么你必须使用带回调函数的promise。 – Konstantin

+0

有没有加载文件的方法,不使用承诺? –