在尝试理解为什么$ q.all返回数组中最后一个promise的响应时,我遇到了一些困难,因为所有的承诺都给出了:
function getGlobalData() {
$q.all(
[
genericApi.submitPostRequest(getPostData('firstKey')),
genericApi.submitPostRequest(getPostData('secondKey')),
genericApi.submitPostRequest(getPostData('specialKey'))
])
.then(function(results){
vm.globalObject['firstKey'] = results[0].data;
vm.globalObject['secondKey'] = results[1].data;
vm.globalObject['specialKey'] = results[2].data;
});
}
端点都是一样的,我在每个请求上唯一改变的是'postData'对象中的一个元素(关键元素)。
function submitPostRequest(data) {
return $http({
method: 'POST',
data: data,
url: 'https://someUrl',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer someToken'
}
});
}
发布数据:
var postRequest = {
'endtime' : null,
'key' : null,
'arr' : ['diff','core'],
'starttime' : null
};
getPostData:
function getPostData(key){
postRequest.key = key;
return postRequest;
}
使用angular.copy
为每个请求创建数据的新副本:
function getPostData(key){
var req = angular.copy(postRequest);
req.key = key;
return req;
}
问题正在发生,因为postRequest
是全局的,因此对象被改变了三次但使用了相同的对象。要么使用angular.copy
,要么使用JSON.parse
和JSON.stringify
,要么只是声明对象内联。
function getPostData(key){
var postRequest = {
'endtime' : null,
'key' : null,
'arr' : ['diff','core'],
'starttime' : null
};
postRequest.key = key;
return postRequest;
}