Я уже начал приключение с AngularJs, но идея обещаний и возвращающихся асинхронных данных переполнила меня.ngResource return return callback result by service
Я пытаюсь выполнить простой сбор данных с помощью метода .factory и $ resource service.
Вот мой $ служба ресурс возвращения обещание
(function() {
angular.module('token')
.factory('tokenService', ['$resource', 'baseUri', tokenService]);
function tokenService($resource, baseUri) {
return $resource(baseUri + 'token', {}, {
post: {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
});
}
})();
Я использую эту услугу в другой сервис, который должен возвращает данные.
(function() {
angular.module('authorization')
.factory('authorizationService', ['$httpParamSerializer', 'tokenService', authorizationService]);
function authorizationService($httpParamSerializer, tokenService) {
return {
authorization: function(user){
var token = {};
tokenService.post({}, $httpParamSerializer({
grant_type: 'password',
username: user.login,
password: user.password,
client_id: user.clientId
}), function(response){
token = response;
console.log('authorizationResponse', response);
console.log('authorizationToken', token);
});
// .$promise.then(function(response){
// token = response;
// console.log('authorizationResponse', response);
// console.log('authorizationToken', token);
// });
console.log('finalToken', token);
return token;
}
};
}
})();
Но я не могу заставить переменную токена получить результат tokenService.post() перед сохранением.
Короткий ответ, вы не можете. Ваш авторизационный сервис должен будет вернуть Promise. Существует проект предложения по добавлению новой функции [ожидание] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await) на язык, но это путь , – teppic