Я создал Office Web Addin в Angular 5, и теперь я работаю с Office Rest Api, я следовал инструкциям из Использование rest Api в Addins
Из документации этоочищается, что мы можем вызвать остальные api url с токеном, который мы получаем из функции, которая написана внутри Angular's ngOnInit () в myComponent.ts
Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
if (result.status === "succeeded") {
var accessToken = result.value;
// Use the access token
getCurrentItem(accessToken);
} else {
// Handle the error
}
});
Из приведенного выше кода я являюсьПолучив accessToken успешно, я напечатал его в консоли. Теперь, но проблема в том, что я использую Angular 5, поэтому синтаксис между ними конфликтует, потому что, если я создаю функцию с именем
getCurrentItem(accessToken)
в классе Angular 5Я должен вызвать его как this.getCurrentItem(accessToken)
внутри выше, который выдает ошибку, что
'this' is not defined
В этом случае я попытался установить accessToken в localStorage и получить его из функции checkAccessToken как
Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
if (result.status === "succeeded") {
accessToken = result.value;
localStorage.setItem('apiAccessToken',accessToken)
// console.log(result.status)
//this.getCurrentItem(accessToken)
} else {
console.log(result.status);
}
});
getAccessToken(){
apiAccessToken:any = localStorage.getItem('apiAccessToken');
console.log("API_Access_token : "+apiAccessToken);
}
Итак, теперь внутри консоли я получаю INCOMPLETE Access_token, потому что я получаю отказ в доступе при любом вызове rest, который я вызывал вв первый раз, в следующий раз, когда я снова вызываю тот же URL отдыха с токеном, он работает, потому что на этот раз он получает полный токен доступа Api.
Я могу понять, что это происходит, потому что до ожидания office getCallBackTokenAsync () функция для завершения, функция getAccessToken () вызывается.
Даже я не могу вызвать getAccessToken () внутри офисной функции, потому что ей нужно this.getAccessToken () , что неприемлемо для офисной функции, которая возвращает AccessToken, поэтому есть ли другой способ получить его или дождаться, пока getCallBackTokenAsync () офисная функция завершит свой вызов