在AngularJS中,$http.get
是一个用于发起HTTP GET请求的服务方法。当需要等待多个异步请求全部完成后再执行某些操作时,我们需要使用特定的技术来处理这种情况。
$q
是AngularJS中的promise服务,$q.all()
可以等待多个promise全部完成。
var promises = [
$http.get('/api/data1'),
$http.get('/api/data2'),
$http.get('/api/data3')
];
$q.all(promises)
.then(function(responses) {
// 所有请求都已完成
var data1 = responses[0].data;
var data2 = responses[1].data;
var data3 = responses[2].data;
// 处理数据...
})
.catch(function(error) {
// 任一请求失败
console.error('请求失败:', error);
});
如果你的环境支持ES7+,可以使用async/await语法:
async function fetchAllData() {
try {
const [data1, data2, data3] = await Promise.all([
$http.get('/api/data1').then(r => r.data),
$http.get('/api/data2').then(r => r.data),
$http.get('/api/data3').then(r => r.data)
]);
// 所有数据都已获取
} catch (error) {
console.error('请求失败:', error);
}
}
如果你需要更细粒度的控制:
var totalRequests = 3;
var completedRequests = 0;
var results = [];
function checkCompletion() {
if (completedRequests === totalRequests) {
// 所有请求完成
}
}
$http.get('/api/data1').then(function(response) {
results[0] = response.data;
completedRequests++;
checkCompletion();
});
$http.get('/api/data2').then(function(response) {
results[1] = response.data;
completedRequests++;
checkCompletion();
});
$http.get('/api/data3').then(function(response) {
results[2] = response.data;
completedRequests++;
checkCompletion();
});
$q.all()
时,任一请求失败会导致整个promise被拒绝。$q.all()
是最推荐的AngularJS方式没有搜到相关的文章