В настоящее время я изучаю, как использовать Angular.js, и пытался написать собственный код аутентификации с использованием REST-подобного API. Ниже приведен код моей службы проверки подлинности.Выполнение кода асинхронно в JavaScript
Проблема с моей функцией signIn
в том, что она всегда возвращает false, даже когда мой api возвращает HTTP 200
. Через некоторое время я понял, что из-за синхронного характера javascript оператор return response;
выполняется перед оператором response = res.data.key;
.
Я не знаю, как выполнить оператор возврата после завершения назначения (если ответ HTTP 200
). Как мне это сделать?
angular.module('app').factory('auth', ['Base64', '$http', function(Base64, $http) {
return {
signIn: function(email, password) {
var response = false;
var encoded = Base64.encode(email + ':' + password);
$http.defaults.headers.common.Authorization = 'Basic ' + encoded;
$http.post('api/v1/sign_in', {}).then(function(res) {
if (res.status == 200) {
response = res.data.key;
}
});
return response;
}
}
}]);