Javascript 如何在AngularJS中链接两个http调用?
我正在尝试链接两个http调用。第一个返回一组记录,然后我需要获取每个记录的财务数据Javascript 如何在AngularJS中链接两个http调用?,javascript,angularjs,json,Javascript,Angularjs,Json,我正在尝试链接两个http调用。第一个返回一组记录,然后我需要获取每个记录的财务数据 flightRecordService.query().$promise.then(function (flightRecords) { $scope.flightRecords = flightRecords; for (var i = 0; i < $scope.flightRecords.length; i++) { $scope.flightRecords[i].financeDo
flightRecordService.query().$promise.then(function (flightRecords) {
$scope.flightRecords = flightRecords;
for (var i = 0; i < $scope.flightRecords.length; i++) {
$scope.flightRecords[i].financeDocument =
financeDocumentService
.isReferencedDocumentIdCompensated({
id: $scope.flightRecords[i].id
}).$promise.then(
function (data) {
return ({
'isCompensated': data.headers['compensated']
});
}
);
console.log($scope.flightRecords);
}
});
financeDocument对象没有我期望的结构。。。我需要以下格式的文件:
...
endFlight: "2017-01-06T20:54:05.296"
financeDocument: { isCompensated: "false" }
id: 100
...
我需要改变什么才能得到它
非常感谢 您正在尝试使用承诺同步设置financeDocument属性。您需要在promise的成功回调中设置变量。为什么不在原始对象上设置它呢
flightRecordService.query().$promise.then(function (flightRecords) {
$scope.flightRecords = flightRecords;
for (var i = 0; i < $scope.flightRecords.length; i++) {
(function(record) {
financeDocumentService
.isReferencedDocumentIdCompensated({
id: $scope.flightRecords[record].id
}).$promise.then(
function (data) {
$scope.flightRecords[record].financeDocument = {
'isCompensated': data.headers['compensated']
}
});
})(i)
console.log($scope.flightRecords);
}
});
flightRecordService.query().$promise.then(函数(flightRecords)){
$scope.flightRecords=flightRecords;
对于(变量i=0;i<$scope.flightRecords.length;i++){
(功能(记录){
财务文件服务
.IsReferenceDocumentIDCompensed({
id:$scope.flightRecords[record].id
})那么,我保证(
功能(数据){
$scope.flightRecords[record].financeDocument={
'isCompensated':data.headers['compensated']
}
});
})(一)
log($scope.flightRecords);
}
});
当您检索到额外的详细信息时,您要做的是修改每个“飞行记录”条目。您可能还需要使用$q.all
向调用者发出操作完成的信号
const promise = flightRecordService.query().$promise.then(flightRecords => {
return $q.all(flightRecords.map(flightRecord => {
return financeDocumentService.isReferencedDocumentIdCompensated({
id: flightRecord.id
}).$promise.then(data => Object.assign(flightRecord, {
isCompensated: data.headers.compensated
}))
}))
})
promise.then(flightRecords => {
$scope.flightRecords = flightRecords
})
嗨@amahfouz,我该怎么做?感谢您为什么使用
对象。assign
而不仅仅是执行flightRecord.isCompensated=data.headers.compensated
?@FrankerZ对象。assign
返回修改后的对象,从而解决该对象的承诺。另一种选择是data=>{flightRecord.isCompensated=data.headers.compensated;return flightRecord}
我喜欢它返回一个承诺,可以用于更多的链接hanks@Phil!我使用@FrankerZHi@FrankerZ提供的解决方案,首先我想感谢您的帮助,然后我想问您是否可以帮助我,我只是想了解您当时在做什么:(函数(记录){…})(我)
再次非常感谢!它创建一个捕获,并在函数期间保留I的值(即记录)。如果没有它,data函数将一次又一次地覆盖最后一个键,因为i现在是最后一个值。
const promise = flightRecordService.query().$promise.then(flightRecords => {
return $q.all(flightRecords.map(flightRecord => {
return financeDocumentService.isReferencedDocumentIdCompensated({
id: flightRecord.id
}).$promise.then(data => Object.assign(flightRecord, {
isCompensated: data.headers.compensated
}))
}))
})
promise.then(flightRecords => {
$scope.flightRecords = flightRecords
})