在尝试理解为什么$ q.all对于给定的所有promise,为什么返回数组中最后一个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'
}
});
}
postData:
var postRequest = {
'endtime' : null,
'key' : null,
'arr' : ['diff','core'],
'starttime' : null
};
getPostData:
function getPostData(key){
postRequest.key = key;
return postRequest;
}
答案 0 :(得分:1)
使用angular.copy
为每个请求制作新的数据副本:
function getPostData(key){
var req = angular.copy(postRequest);
req.key = key;
return req;
}
答案 1 :(得分:1)
之所以发生此问题,是因为postRequest
是全局的,因此该对象被更改了3次,但是使用了相同的对象。要么使用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;
}