Я новичок в узлах и обещаниях, поэтому любая помощь будет принята!
Я пытаюсь:
- получить токен доступа из API
- отправить маркер доступа в тот же API для URL-адреса
- опросить URL-адрес для получения некоторых данных
Я думал, что разумным способом сделать это будет цепочка обещаний (Примечание Я еще не реализовал опрос, я просто пока что пытаюсь работать с console.log с интервалами. Также тела запросов не включены ниже, но не являются проблемой):
const request = require('request');
// get access token
new Promise((resolve, reject) => {
request.post({
json_request
}, (error, response, body) => {
if (error) console.error(error);
console.log("got access token"));
resolve(JSON.parse(body).accessToken);
});
})
// use access token to get url
.then(
(accessToken) => {
request.post({
json_request_with_access_token
}, (error, response, body) => {
if (error) console.error(error);
console.log("got URL");
return JSON.parse(body).url;
})
}
)
// Poll URL
.then(
(reportURL) => {
console.log("I'm here!");
setInterval(() => {
console.log("Report URL: ".concat(reportURL));
}, 10000); // setInterval waiting time
}
)
Проблема в том, что последнее обещание в цепочке выполняется до того, как закончится среднее. Таким образом, вывод на консоль:
got access token
I'm here!
got URL
report URL: undefined
, если "Я здесь!" выводится перед «полученным URL», тогда во время выполнения второго обещания код должен перейти к последнему обещанию. Проблема в том, что у него еще нет URL. Я не понимаю, как запускать их один за другим, а не одновременно. Я попытался сделать три обещания в 3 отдельных функции, затем обернуть их в одну функцию asyn c main (), где
async function main() {
let accessToken = await getAccessToken();
let url = await getURL(accessToken);
await pollReport(url);
}
, но в этом была та же ошибка. Кто-нибудь знает, как это исправить? Я где-то сделал ошибку basi c? Любая помощь приветствуется!