Я изучал обещания по этой ссылке, и я понял ее идею
var parentID;
$http.get('/api/user/name')
.then(function(response) {
parentID = response.data['ID'];
for (var i = 0; i < response.data['event-types'].length; i++) {
return $http.get('/api/security/' + response.data['event-types'][i]['key']);
}
})
.then(function(response) {
// response only returns one result of the many promises from the for loop
// do something with parentID;
});
Тем не менее, мой вариант использования требует прокрутки и отправки создания более 1 обещания. Я попытался связать как пример выше, но только одно из обещаний, созданных из цикла for, было выполнено.
Как я могу продолжать связывать все обещания, продолжая иметь доступ к переменному parentID?
Вы должны использовать $q.all
потому что он интегрирован с циклом дайджеста AngularJS.
var parentID;
$http.get('/api/user/name')
.then(function(response) {
parentID = response.data['ID'];
var promiseList = [];
for (var i = 0; i < response.data['event-types'].length; i++) {
var iPromise = $http.get('/api/security/' + response.data['event-types'][i]['key']);
promiseList.push(iPromise);
};
return $q.all(promiseList);
})
.then(function(responseList) {
console.log(responseList);
});
Из Документов:
все (обещания);
Объединяет несколько обещаний в единое обещание, которое разрешается, когда все вступительные обещания разрешаются.
параметры
Массив или хэш обещаний.
Возвращает
Возвращает одно обещание, которое будет разрешено с помощью массива/хэша значений, каждое значение, соответствующее обещанию с тем же индексом/ключом в массиве обещаний/хеш. Если какое-либо из обещаний будет разрешено с отклонением, это обещание будет отклонено с тем же значением отклонения.
Вы можете использовать Promise.all()
, заменить Array.prototype.map()
for for
loop
var parentID;
$http.get('/api/user/name')
.then(function(response) {
parentID = response.data['ID'];
return Promise.all(response.data['event-types'].map(function(_, i) {
return $http.get('/api/security/' + response.data['event-types'][i]['key'])
}))
})
.then(function(response) {
// response only returns one result of the many promises from the for loop
// do something with parentID;
})
.catch(function(err) {
console.log(err);
});
.then
обработчик не возвращаетpromise
.. Может бытьq.all
поможет!