我正在开发一个文件阅读服务,如下所示:
Intent
然后像这样使用它:
angular.factory('fileService', fileService);
function fileService($cordovaFile){
var service = {
readFile: readFile
};
return service;
///////////////
function readFile(path, file){
$cordovaFile.readAsText(path, file)
.then(function (success) {
console.log("read file success");
console.log(success);
return success;
}, function (error) {
alert("Fail to read file:"+error);
console.log("Fail to read file");
console.log(error);
return false;
});
}
}
问题是无法返回数据。如何将数据返回?
答案 0 :(得分:1)
您的问题是您实际上没有从readFile函数返回任何结果。您正在从回调函数返回数据但是如果您想到它...结果将返回到函数readFile本身并且它保留在该函数内部。你想要做的是返回函数readFile的整个结果,然后在你使用它的控制器中解析promise。这是代码:
angular.factory('fileService', fileService);
function fileService($cordovaFile){
var service = {
readFile: readFile
};
return service;
function readFile(path, file){
return $cordovaFile.readAsText(path, file);
}
}
然后你就这样使用它:
var data = fileService.readFile(cordova.file.dataDirectory,filename);
data.then(function (success) {
// Do whatever you need to do with the result
}, function (error) {
/// Handle errors
});
通常,当您使用服务来实现某种使用promises并返回结果的功能时,您应该始终返回promise对象,该对象可以在需要的任何地方解析。 我强烈建议您阅读promise objects的这个很好的解释。
答案 1 :(得分:0)
你的函数readFile
什么都不返回,所以,首先你应该回复诺言:
function readFile(path, file) {
return
$cordovaFile.readAsText(path, file).then(function (success) {
console.log('Read file success');
console.log(success);
return success;
}, function (error) {
alert('Fail to read file: ' + error);
console.log('Fail to read file');
console.log(error);
return false;
});
}
然后,如果你试图按照自己的方式使用它,你就不会再被定义了,你会得到一个承诺。
但是因为它是一个异步方法,你会得到那个承诺仍然未决,你可能不希望这样,因为你需要承诺的履行价值。所以,你应该像这样使用它:
fileService.readFile(cordova.file.dataDirectory, filename).then(function(data) {
// use data here
});