Я понимаю Угловые обещания, когда Angular делает запрос с $http
, ожидается, что .then(function(res){ return res })
ждет, пока обещание не будет разрешено. Поэтому, если я привязал запрос к переменной, не должно ли значение переменной быть разрешено обещанием?Почему эта служба возвращает обещание, а не выполняемое обещание?
Service для вызова GitHub API
is.service('githubApiService', function($http) {
this.repo = function(user, repo) {
var value = $http.get('https://api.github.com/repos/' + user + '/' + repo).then(function(json) {
return {
stargazers_count: json.data.stargazers_count,
watchers_count: json.data.watchers_count,
forks_count: json.data.forks_count,
watchers: json.data.watchers,
subscribers_count: json.data.subscribers_count
};
});
return value;
};
})
директиву, которая вызывает службу
is.directive('chart', function(githubApiService) {
return {
restrict: 'E',
template: '<svg margin="[20, 30, 30, 40]", width="750" height="450"></svg>',
link: function(scope, element, attrs) {
var ais = githubApiService.repo('srph', 'angular-infinite-scroll');
var ai = githubApiService.repo('thenikso','angular-inview');
var ns = githubApiService.repo('jankuca', 'ng-scroller');
console.log(ai); // returns a promise!
}
}
})
Nope. 'then' ждет * с выполнением обратного вызова * до тех пор, пока не будет выполнено обещание, и * возвращает другое обещание *. Он не блокирует ваш скрипт до тех пор, пока не будет выполнена асинхронная задача! – Bergi
Выполненное обещание по-прежнему является обещанием, поэтому ваша формулировка немного странная. Я подозреваю, вы имеете в виду что-то другое. – zeroflagL