1

У меня есть 2 factory функции:AngularJs пустой результат

Фабрики

factory.getCurrEmployee = function() 
{ 
    data = {"api_token": authenticationFactory.getToken()}; 
    url = GLOBALS.url + 'show/employee/' + $cookieStore.get('employeeid'); 
    return requestFactory.post(url, data) 
     .then(function (response) { 
      return response.data.result.Employee; 
     }, function() { 
      $window.location.assign('/'); 
     }); 
} 

factory.isSuperadministrator = function() { 
    factory.getCurrEmployee().then(function (employee) { 
     if(employee.Role == 'Superadministrator') 
     { 
      return true; //console.log('Superadministrator') <- that console.log is visible in my console 
     } 
     return false; 
    }); 
} 
return factory; 

В мой контроллер я бы ожидать, истинным или ложным (пользователь является Superadministrator или нет), но результат ничего. Если я console.log на моем factory.isSuperadministrator, результат будет правдой.

Контроллер

console.log(employeeFactory.isSuperadministrator()); 

Почему это не работает?

+0

Его асинхронный. Ваше возвращение обещает не значение bool. – ste2425

+0

@ ste2425 эти значения 'Boolean' никогда не будут возвращаться до тех пор, пока обещание не вернется. потому что 'boolean' вернулся из функции обратного вызова. –

+0

@PankajParkar Да, но тот факт, что OP не использует '.then' в своем коде контроллера вызова, но возвращает ожидаемое значение в обратном вызове службы, показывает недостаточную осведомленность о том, как работает цепочка привязок. Вот почему я сказал, что он возвращает обещание, а не ценность в его обратном вызове. – ste2425

ответ

4

Пропущено, чтобы вернуть обещание от factory.getCurrEmployee в factory.isSuperadministrator функция. Также я сделал небольшой рефакторинг, который делает ваш код более умным.

factory.isSuperadministrator = function() { 
    return factory.getCurrEmployee().then(function (employee) { 
     return employee.Role == 'Superadministrator'; 
    }); 
} 

Но выше вещи не решить вашу проблему, то это будет только print обещание объект в console. Для того, чтобы решить вашу проблему дальше вам нужно поставить .then функцию с обратным вызовом над обещанием возвращенного employeeFactory.isSuperadministrator(), как показано ниже

Контроллер

employeeFactory.isSuperadministrator().then(function(data){ 
    console.log(res); 
}); 

ли следовать тем же правилам, которые описаны здесь в this answer

+0

По-прежнему понадобилось бы '. then' в вызове кода контроллера. – ste2425

+0

@ ste2425 Вы могли бы найти ответ на указанный ответ –

+0

Это было не в вашем ответе, когда я прокомментировал. – ste2425

0

Попробуйте

employeeFactory.isSuperadministrator().then(function(res){ 
console.log(res); 
}); 
Смежные вопросы