Javascript AngularJS承诺不使用FileReader解析文件

Javascript AngularJS承诺不使用FileReader解析文件,javascript,angularjs,promise,Javascript,Angularjs,Promise,我正在尝试在我的服务中编写一个非常简单的函数,它将创建一个文件读取器,读取我发送的小图像文件,并将结果返回给我的控制器。文件很好地为我服务。它到达我的控制器,只记录一个空行。我想我一定是把承诺弄糟了。我哪里做错了 服务功能-- 控制器功能-- 您没有onload事件,因此它实际上不会返回读取的文件数据 this.fileRead = function(file) { var deferred = $q.defer(); var reader = new FileReader(

我正在尝试在我的服务中编写一个非常简单的函数,它将创建一个文件读取器,读取我发送的小图像文件,并将结果返回给我的控制器。文件很好地为我服务。它到达我的控制器,只记录一个空行。我想我一定是把承诺弄糟了。我哪里做错了

服务功能--

控制器功能--


您没有onload事件,因此它实际上不会返回读取的文件数据

this.fileRead  = function(file) {
    var deferred = $q.defer();

    var reader = new FileReader();

    reader.onload = function() {
        deferred.resolve(reader.result);
    };

    reader.readAsDataURL(file);

    return deferred.promise;
};

正是我错过的。现在可以用这个创建一个小的图像预览。谢谢@这个答案似乎对你有所帮助。您应该通过单击左侧的箭头将其标记为“有用”(如果操作正确,它将变为绿色)。投票(向上/向下)有助于找出社区认为最好的答案,“接受”答案告诉人们哪个答案对你帮助最大。两者都很好!我早就想我是那样做的。很抱歉反应太晚。再次感谢。这是我在网上找到的最好的解决方案
$scope.onFileSelect = function($files) {
     MyService.fileRead($files[0])
                  .then(function(result) {
                    console.log(result);
                 });
};
this.fileRead  = function(file) {
    var deferred = $q.defer();

    var reader = new FileReader();

    reader.onload = function() {
        deferred.resolve(reader.result);
    };

    reader.readAsDataURL(file);

    return deferred.promise;
};