我有一个有趣的情况,我从一个GET请求获得一个id列表,然后我想抓住第一个GET请求获取该对象的图像url。不幸的是,有时从第一个GET请求返回的ID无效,我们需要再检查下一个ID。我目前正在尝试一些递归回调的方式,但这并不是我想做的事情,我只是因为Angular的异步性质而没有得到任何结果。Angular nested GETs
这里是我的代码示例:
app.controller('gr_menu', function($scope, grAPI, flashManager, catalogAPI) {
$scope.reports = [];
grAPI.ReportList().then(
function(success) {
success.data.forEach(function(report) {
if(report.live) {
$scope.reports.concat({'id': report.id, 'title': report.game, 'imgUrl': getReportData(report)});
}
});
},
function(error) {
flashManager.flashMessage('Danger', 'Failed to load game reports: '+error);
});
function getReportData(report) {
catalogAPI.SearchGame(report.game, [{"json.offerType":"Base Game"}])
.then(function(success){
var i = 0;
return checkOfferID(success.data.result[i].offerId, function (result) {
i++;
console.log(result)
if (result != false) {
return checkOfferID(success.data.result[i].offerType);
} else {
return result;
}
});
});
}
function checkOfferID(offerID) {
Origin.games.catalogInfo(offerID)
.then(function (catData) {
return catData.customAttributes.imageServer + catData.localizableAttributes.packArtLarge;
}, function (catErr) {
return false;
});
}
});
所以它实际上是3个GET请求深。首先是获取我们的“报告”列表,然后从那里获取这些报告中指示的游戏的ID,然后从那里获取图像。
我没有从那个console.log得到任何东西,所以也许我误解了这个回调应该如何工作。我仍然试图熟悉使用Angular和回调。我会通过一个简单的for循环来实现它,如果它是python,就会中断它。
你的getReportData没有返回任何东西。你也不是递归调用任何东西,你只是调用第一个和第二个元素的checkOfferId()。你应该看看承诺如何工作。 – Cameron
是否有可能加入服务器上的所有数据,所以你会从客户端做一个请求?在你的情况下,你正在做〜(1 + n * 2)个请求,这不是最佳实践。 –
不幸的是,除了第一个,我无法控制这些apis。或者我肯定会走这条路线,而不是进行嵌套呼叫。 – user1475573