Мне нужно получить значение из API, которое быстро реализуется. Проблема в том, что код, который я написал, всегда приносит мне одно и то же значение. Я пробовал два способа:
var fetch = require("node-fetch");
for(let i=0; i<5; i++){
setTimeout(function(){}, 3000);
fetch('https://api.binance.com/api/v3/avgPrice?symbol=ETHBTC')
.then(res => res.json())
.then(data => {console.info(data.price)});
}
и синхронно:
var fetch = require("node-fetch");
var request = async () => {
var response = await fetch('https://api.binance.com/api/v3/avgPrice?
symbol=ETHBTC');
var json = await response.json();
console.info(json.price);
}
for(let i=0; i<5; i++) {
setTimeout(function(){request();}, 3000);
}
но я всегда получаю что-то вроде этого:
0.03244206
0.03244206
0.03244206
0.03244206
0.03244206
Любое предложение?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны понимать, что setTimeout не останавливает выполнение цикла... Цикл устанавливает все тайм-ауты, которые будут выполняться сразу один за другим.
const fetch = require("node-fetch");
let i = 0, times = 5;
const interval = setInterval(() => {
if (++i < times) clearInterval(interval);
fetch('https://api.binance.com/api/v3/avgPricesymbol=ETHBTC')
.then(res => res.json())
.then(data => {console.info(data.price)});
},3000);
Использование асинхронного/ожидания:
const fetch = require("node-fetch");
let i = 0, times = 5;
const interval = setInterval(async () => {
if (++i < times) clearInterval(interval);
const response = await fetch("https://api.binance.com/api/v3/avgPricesymbol=ETHBTC");
const json = await response.json();
console.info(json);
},3000);
(узел: 1676) UnhandledPromiseRejectionWarning: FetchError: неверный текст ответа json в api.binance.com/api/v3/avgPricesymbol=ETHBTC причина: неожиданный токен < в JSON в позиции 0 в E:\proyectosJavaScript\prueba1\node_modules\node-fetch\lib\index.js:241:32 at process._tickCallback (internal/process/next_tick.js:68:7) (node:1676) UnhandledPromiseRejectionWarning: отклонение необработанного обещания. Эта ошибка возникла либо путем включения асинхронной функции....
Наверное, это моя вина. Какая ошибка? Я могу помочь тебе исправить это
Возникла проблема с ожидаемыми данными json. Можете ли вы попробовать записать ответ и показать мне вывод?
Я немного отредактировал код (второй), попробуйте еще раз использовать его и сообщите мне результат
Поздравляю :) Я рад, что помог вам
Я понял свою ошибку с setTimeout(), но, используя предложенный вами код, я получил эту ошибку: