私は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を返さなければならなかった –