Использование обещаний с помощью AngularJS

У меня есть эта услуга

   service.getCurrentUser = function () {
        var def = $q.defer(); 
        if (service.user == null)
        {
            $http.get("./api/GetCurrentUser/")
            .success(function(data) { 
                service.user=data; 
                def.resolve(data); 
            }) 
            .error(function() { 
                def.reject("Failed to get user"); 
            }); 
        }
        else
            def.resolve(service.user);              
        return def.promise;
    } 

в моем контроллере я хочу вызвать это и ждать возврата, если пользователь в определенной группе запускает другой код

Как написать его, чтобы он использовал обещание, возвращенное службой

javascript,angularjs,

0

Ответов: 2


0

Реализация обещаний может быть такой:

service.getCurrentUser = function () {
    return new Promise((resolve,reject)=>{
        if (service.user == null) {
            $http.get("./api/GetCurrentUser/")
                .success(function (data) {
                    service.user = data;
                    resolve(data);
                })
                .error(function () {
                    reject("Failed to get user");
                });
        }else{
            resolve(service.user);
        }
    });
}

Вы можете назвать это как:

    service.getCurrentUser()
    .then(user => {
        console.log('user', user);
    })
    .catch(error => { 
        console.log('error', error);
    });

-1

Вы, скорее всего, захотите вернуть обещанное обещание $http, вы также должны помнить, что можете приложить многочисленные обратные вызовы к одному обещанию, используя, .thenи они будут выполнены в том порядке, в котором они были вставлены.

Таким образом, ваш сервис будет выглядеть так:

service.getCurrentUser = function () {
    if (service.user == null)
    {
        return $http.get("./api/GetCurrentUser/")
        .success(function(data) { 
            service.user=data; 

        }) 
        .error(function() { 
            // error
        }); 
    }
} 

и в вашем контроллере вы можете сделать

MyService.getcurrentUser().then(function(){ ... });

В этом случае вам нужно будет указать undefined, возвращенный службой.

JavaScript, angularjs,
Похожие вопросы
Яндекс.Метрика