Всегда ли объект обещания нуждается в функции обратного вызова? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть требование, что мне нужно создать службу в Angular 1 и загрузить данные с помощью вызова API, который может быть доступен в контроллерах.Ранее я пытался сделать вызов API с помощью службы $ http и присвоить данные переменной / объекту.Затем я внедрил службу и назначил переменную / объект переменной контроллера / объекту области видимости.

То, что я наблюдал в цикле событий контроллера, не совпадает с циклом событий сервиса, а переменная / объект области контроллера остается неопределенной.Позже я получил решение для работы, возвращая обещание из службы и вызывая обещание в контроллере, однако я новичок в обещаниях и не могу полностью принять это, когда я вызывал обещание, я должен был передать функцию какаргумент, который я считаю обратным вызовом для вызова API $ http, но я не уверен, как он работает под капотом.Кто-нибудь может это объяснить?

//service code
this.getuserimages = function(uname) {
    console.log("Username in UserImage Service: " + uname);
    var promise = $http.get('/api/images/' + uname).then(function(response) {
        this.userimages = response.data;
        return this.userimages;
    });
    return promise;
}

// controller code        
var userimagespromise = userImageService.getuserimages($routeParams.username);
userimagespromise.then(function(data) {
            $scope.userimages = data;

1 Ответ

0 голосов
/ 23 марта 2019

Ваш код - Цепочка обещаний .

Я переписал ваш код таким образом, что эта цепочка более понятна, но означает точно такой же:

$http.get('/api/images/' + uname)
.then(function(response) {
    this.userimages = response.data;
    return this.userimages;
})
.then(function(images) {
    $scope.userimages = images;
});

Вы можете прочитать этот поток следующим образом:

  • Пожалуйста, дайте мне изображения пользователя
  • И тогда , мы будем доступны (=> возвращены из get и переданы в функцию затем ), сохраним их в переменной и вернем в элемент next элемента цепочка
  • и , затем , нам они будут доступны (=> возврат из предыдущего обещания), установите их в область действия $

Обратите внимание, что весь поток является асинхронным, потому что каждое Обещание является " объектом, представляющим возможное завершение или неудачу асинхронной операции ".

Вы можете найти большеинформация в Документация обещания .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...