그래서 Amazon S3 버킷에 이미지를 업로드하는 서비스에서 정의한 일련의 기능이 있습니다. console.log를 사용하여 서비스 자체에서 경고하고 모든 것이 올바르게 돌아옵니다.컨트롤러에이 약속을 다시하려면 어떻게해야합니까?
그러나 이제 컨트롤러에 약속을 되 돌리며 업로드가 완료되었음을 사용자에게 알릴 수 있습니다. 나는 내가 어떻게 그것을 할 것인지 잘 모르겠다. 나는 filereader.onload에 반환을 두는 것을 시도했다, 그러나 나는 나가 후에 돌려 보낸 것이 약속 및 그런 것이 아니다는 것을 말하는 과실을 얻는다. 여기에 내 코드입니다 :
angular.module("testApp", [])
.controller("testCtrl", function($scope, amazonService) {
$scope.test = "leeroy jenkins";
$scope.upload = function() {
amazonService.uploadImage($('#file'));
}
})
.service("amazonService", function($http) {
var url = "/api/"
var uploadImageFilestream = function(obj) {
return $http({
method: "PUT",
url: url + "media/images",
data: obj
}).then(function(res) {
if (res.status === 200) {
alert("upload successful!");
}
return res;
});
}
var formatFileName = function(filename, newBase) {
//first, get the file extension
var extension = filename.substring(filename.lastIndexOf("."));
return newBase + extension;
}
this.uploadImage = function(obj) {
var file = obj[0].files[0];
var fileReader = new FileReader();
fileReader.onload = function(loaded) {
uploadImageFilestream({fileName: formatFileName(file.name, "test1"), fileBody: loaded.target.result});
}
fileReader.readAsDataURL(file);
}
})
나는 내가 uploadImage 기능으로 uploadImageFilestream 기능을 결합하면 작동 것을 알지만, 별도의 함수의 약속을 구조하는 방법을 모르겠어요.
지금은 "amazonservice.uploadImage 말씀이 오류를 받고 있어요 (...). 다음 컨트롤러에 .then을 추가하려고 할 때 함수가 아닙니다. –
마지막 행을 변경하여 deferer.promise를 반환해야했습니다. –