使用Angular 1.2.7,我编写了一个服务来将文件上传到s3:在具有多个文件输入字段的界面中选择文件,并为控制器中的循环中的每个文件调用该服务:
for file, index in $files
cloudUpload.uploadToS3(
file,
index
)
在我的服务中:
signS3File: (file) ->
#create the uploadData array...
#...
#generate unique uploadData for this particular file
return $http(
method: 'POST'
url: '/api/s3_signing'
data: uploadData
)
uploadToS3: (file, index) ->
@signS3File(file)
.then(do some more stuff)
所有这些都很有效,但我有一个问题:
当我在每次调用函数时查看uploadData中生成的内容时,数据是唯一的并且对应于我想要发送的内容。但是,当我检查$ http发出的请求时,事实证明使用的uploadData始终是相同的(我认为它是最后一次$ http调用之一)。我真的不明白为什么,如果uploadData是正确的,为什么$ http总是发送相同的数据!
为了说明一点,这里是创建的每个uploadData变量的console.logs:
Object {... file_name: "80RT2ebgkX2QQMGcxi4U0rqumZuUWblF.mp3"}
Object {... file_name: "7O6QBlMSDpRA4rS5UgPVDEdIIwmRkV0t.mp3"}
这里是请求发送的数据(两个请求都相同,这是我的问题):
...
file_name: "7O6QBlMSDpRA4rS5UgPVDEdIIwmRkV0t.mp3"
编辑:使用$ http.post(...)而不是$ http(方法:“post”...)具有相同的结果。
编辑:我已经将s3signing函数从服务移动到控制器,并且它的行为正常:正如Caleb建议的那样,它可能是一个范围问题 - 我欢迎这些想法,但是控制器中的签名并不理想!