我真的和我的一点代码混淆,这是一个angularjs服务。我尝试使用Promise.all来连接作为服务一部分的两个promise,并将结果发送给我的控制器。 事情是由Promise.all返回的对象由两个相同的数组组成。 这里我的代码,只是为了更清楚:Promise.all()返回意想不到的值
batchModule.service('BatchService', ['$http', '$q', '$log', 'MessageboxService', function ($http, $q, $log, MessageboxService) {
let deferred = $q.defer();
this.loadAll =() => {
promise1 =() => {
$http.get(_restApiPath + "/batch/?processtype=IMPORT_CUSTOMER")
// loadLastFiveBatch('IMPORT_CUSTOMER')
.then(function (response) {
deferred.resolve(response.data);
// datas.push(response1);
// console.log(datas);
}, function (error) {
deferred.reject(error);
$log.error(error);
});
return deferred.promise;
};
promise2 =() => {
$http.get(_restApiPath + "/batch/?processtype=IMPORT_LAB_MARGIN")
// loadLastFiveBatch('IMPORT_LAB_MARGIN')
.then(function (response) {
deferred.resolve(response.data);
// datas.push(response2);
// console.log(datas);
}, function (error) {
deferred.reject(error);
$log.error(error);
});
return deferred.promise;
};
Promise.all([promise1(), promise2()])
.then(values => {
console.log(values);
});
};
}]);
的的console.log(值)返回制成由IMPORT_CUSTOMER请求,返回2个等于阵列的一个目的,当Promise.all的第二个参数是一个恰恰promise由IMPORT_MARGIN请求返回。 我今天几个小时一直在研究它,但我找不到任何解决方案。 我希望我很清楚,我的英语不是很好。 谢谢您的回答:-)
你只有一个单一的全球'deferred',所以它有点显而易见的,为什么它能够解析为只有一个值。当然,在第一个时候避免[deferred antipattern](https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)地点! – Bergi