Динамический запрос с извлечением узла - PullRequest
0 голосов
/ 09 февраля 2019

Мне нужно получить значение из 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.log(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.log(json.price);
}
for(let i=0; i<5; i++) {
setTimeout(function(){request();}, 3000);
}

, но я всегда получаю что-то вроде этого:

0.03244206
0.03244206
0.03244206
0.03244206
0.03244206

Любое предложение?

1 Ответ

0 голосов
/ 09 февраля 2019

Вы должны понимать, что 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.log(data.price)});
},3000);

Использование async / await:

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.log(json);
},3000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...