【发布时间】:2016-12-23 17:03:22
【问题描述】:
所以我在服务中定义了一系列函数,将图像上传到我的 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);
}
})
我知道如果我将 uploadImageFilestream 函数与 uploadImage 函数结合使用,它会起作用,但我不确定如何在单独的函数中使用 promise 来构造它。
【问题讨论】:
标签: javascript angularjs http promise