Мне нужна помощь в назначении свойства accessToken в классе MyApi. кажется, что accessToken не назначается должным образом в моем конструкторе. Я хочу сохранить токен доступа в свойстве accessToken, чтобы использовать его в других методах. к сожалению, он не хранится должным образом.
Если я помещаю инструкцию для присваивания вне объекта запроса, свойство accessToken назначается, и я могу получить к нему доступ из других метидов, используя this.accessToken. токен доступа поступает через обратный вызов запроса, где я извлекаю его из тела. проблема в том, что он не сохраняется должным образом в свойстве accessToken.
var request = require("request");
class MyApi {
constructor() {
request({ url: "URL", headers: { Authorization: "Basic KEY" } }, function(
error,
response,
body
) {
if (error) {
console.log(error);
} else {
// this console log statement logs the access token
console.log(`Access Token : ${JSON.parse(body).access_token}`);
// i try to set it into the accessToken property
this.accessToken = JSON.parse(body).access_token;
// This statement logs undefined, meaning my accessToken property is not beinga ssiged successfully
console.log(`Access Token Two: ${this.accessToken}`);
}
});
}
newRequest(callback) {
request(
{
// Also if i try to use the accessToken property here, the request returns an error that the access token is invalid
method: "POST",
url: "URL",
headers: { Authorization: "Bearer " + this.accessToken },
json: { key: "value", key: "value" }
},
function(error, response, body) {
if (error) {
console.log(error);
} else {
callback(JSON.stringify(body));
}
}
);
}
}
module.exports = MyApi;
Я хочу использовать токен доступа в других методах, таких как метод newRequest, для выполнения большего количества запросов. кто-нибудь помогите, я буду признателен
Дополнение:
Упрощенная версия:
function request(f) {
f("Token");
}
class MyClass {
constructor() {
request(function(t) {
this.token = t;
}); //.bind(this));
}
getToken() {
return this.token;
}
}
const q = new MyClass();
console.log(q.getToken());
UPD: попробуйте запустить упрощенную версию, а затем проверьте комментарий.