У меня есть функция в node.js, которая ждет HTTP GET-запроса, прежде чем продолжить.В обработчике ошибок для этого запроса GET мне нужно вызвать другую функцию и также дождаться ее.
Моя интуиция говорит, что я должен поставить "await" перед вторым вызовом функции.Тем не менее, node.js не допустит этого.Насколько я понимаю, это потому, что область обработчика ошибок больше не помечается как асинхронная.Я могу обойти это, однако он очень быстро получает спагетти .
Какое лучшее решение?
var accessToken = "SAMPLE ACCESS TOKEN";
const stockDataRequest = async (symbol) =>
{
console.log("Old access token:", accessToken);
//Request stock data.
await axios.get(`https://api.tdameritrade.com/v1/marketdata/${symbol}/quotes?authorization=${accessToken}`).then((response) =>
{
//unimportant
})
.catch((error) =>
{
console.log("\n----Axios Request Failed As Planned----\n");
if(error.response.status == 401)
{
accessToken = auth.newAccessToken(); //**WE NEED TO WAIT ON THIS!!!!**
}
});
console.log("New access token:", accessToken, "\n");
}
В аутентификации:
var newAccessToken = () =>
{
var dataString = 'grant_type=refresh_token&refresh_token=' + refToken + '&access_type=&code=&client_id=GASKETGV2&redirect_uri=';
request(
{
url: 'https://api.tdameritrade.com/v1/oauth2/token',
method: 'POST',
headers: headers,
body: dataString
},
(error, response, body) =>
{
return new Promise((resolve, reject) =>
{
if (error || response.statusCode != 200)
{
console.log("rejecting");
reject("\n\n----New Access Token Request Rejected----\n\n", error);
}
else
{
console.log("Request for new access token resolved. Now returning from auth.");
var genToken = "Bearer " + JSON.parse(body).access_token;
resolve(genToken);
}
})
});
};
Вот результаты:
Old access token: SAMPLE ACCESS TOKEN
----Axios Request Failed As Planned----
New access token: undefined
Request for new access token resolved. Now returning from auth.
Последние два оператора должны поменяться местами, и новый токен должен быть определен.