Функция getIdentityTokenDecrypted
дает мне трудное время. Я хотел бы вернуть обещание от decryptToken
СЕРВИС B до getToken
СЕРВИС A, чтобы получить токен.Как вернуть обещание от функции?
Вот шаги, которые мне нужно:
- Получить
outlookService.mailbox.getUserIdentityTokenAsync
результат. (Дает зашифрованный токен) - Дешифровать токен через
$http
route/api/exchange/createAndValidateIdentityToken
. Этот запрос возвращает токен, который мне нужен в SERVICE A.
Как я могу заставить это работать?
/*** SERVICE A ***/
var service = {
/*...*/
token: getToken()
};
return service;
function getToken() {
var token;
serviceB.getIdentityTokenDecrypted()
.then(function successCallback(response) {
token = response.data.UniqueUserIdentification;
return token;
}, function errorCallback(response) {
return null;
});
}
/*** SERVICE B ***/
function getIdentityTokenDecrypted() {
var token = null;
var promise;
// This async call does not return a promise,
// I don't think I can chain after it.
outlookService.mailbox.getUserIdentityTokenAsync(function (res) {
token = res;
});
// That's why I use an interval
promise = $interval(function() {
if (token != null) {
$interval.cancel(promise);
return decryptToken();
}
}, 100);
function decryptToken() {
var location = window.location.href;
// I need to get the 'data' from the success
// of this request to retrieve the token
return $http({
method: "POST",
url: "/api/exchange/createAndValidateIdentityToken",
data: JSON.stringify({
userIdentityToken: token,
location: location
})
});
};
return promise;
};
Существует первый параметр, который является методом обратного вызова: https://msdn.microsoft.com/en-us/library/office/fp142236.aspx Хотя это приводит к той же проблеме, я не знаю, как возвратите обещание вызова $ hhtp от этой функции обратного вызова. – Elfayer