2014-09-12 61 views
2

我想在我的服務中編寫一個非常簡單的函數,它將創建一個FileReader,讀取我發送的小圖像文件並將此結果返回給我的控制器。該文件得到我的服務就好了。它到達我的控制器並記錄一條空白行。我認爲我搞亂了這個承諾的一部分。我在哪裏錯了?AngularJS承諾不使用FileReader解析文件

服務funtion -

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

    var reader = new FileReader(); 
    reader.readAsDataURL(file); 

    deferred.resolve(reader.result); 

    return deferred.promise; 
}; 

控制器功能 -

$scope.onFileSelect = function($files) { 
    MyService.fileRead($files[0]) 
        .then(function(result) { 
        console.log(result); 
       }); 
}; 

回答

8

你沒有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; 
}; 
+0

正是我所錯過的。現在可以用這個創建一個小圖片預覽片。謝謝! – 2014-09-12 15:37:00

+0

@CoreyMichaelCochran這個答案似乎幫助了你。您應該點擊左邊的箭頭將其標記爲有用(如果您已正確完成此操作,它將變爲綠色)。投票(上/下)有助於理清哪些社區發現是最佳答案,「接受」答案告訴人們哪個答案最能幫助你。兩者都很好做! – m59 2014-09-22 22:21:41

+0

我已經認爲我做到了。回覆晚了非常抱歉。再次感謝。 – 2014-09-24 13:33:00