@Bombesko
Чайник

Как изменить значение переменной?

Всем доброго времени суток! Хочу сделать свой простенький конвертер валют. Для этого забираю данные с сайта. Но у меня проблема в том что не знаю как после "парсинга" сохранить значение валюты. Вот код:
const cheerio = require('cheerio');
const request = require('request');

let currencys = [];
var usd = 0
var eur = 0
var rub = 0
var byn = 0

function addCurrValue(){
     request({
        method: 'GET',
        url: 'https://select.by/kursy-valyut/natsbank-rb'
    }, (err, res, body) => {
    
        if (err) return console.error(err);
    
        let $ = cheerio.load(body);
    
        $('span').each(function (i, e) {
            currencys[i] = $(this).text();
        });
        usd = currencys[4]
        eur = currencys[5]
        rub = currencys[6]
        console.log(usd); //    2,6
    });
}

addCurrValue()

console.log(usd);   // 0
console.log(eur);   // 0
console.log(rub);   // 0
console.log(currencys[4]); // undefined

Подскажите пожалуйста. Спасибо!
  • Вопрос задан
  • 218 просмотров
Решения вопроса 2
Запрос курсов с сайта занимает время — операция асинхронна. Её результат оказывается «потом» в коллбэке, в функции (err, res, body) => { ... }.

А вот все эти console.log() выполняются прямо сразу – поэтому в них ещё ничего нет и выводится 0.

Решение – выполнять действия, которым нужны значения курсов, после того, как получены значения курсов. Например, в той же функции. Или из неё вызывать другую.
Ответ написан
Комментировать
webdisigner
@webdisigner
const cheerio = require('cheerio');
const request = require('request');

var currencys = [];
var usd = 0
var eur = 0
var rub = 0
var byn = 0

function addCurrValue(){

    return new Promise((resolve, reject) => {
        request({
            method: 'GET',
            url: 'https://select.by/kursy-valyut/natsbank-rb'
        }, function(err, res, body){
            if (err) return console.error(err);
            
            let $ = cheerio.load(body);
            $('span').each(function (i, e) {
                currencys[i] = $(this).text();
            });

            resolve()
        
        })
    })
    
}

(async function() {
   await addCurrValue()
   // работаешь только после того как получишь данные с первой функции

    usd = currencys[4]
    eur = currencys[5]
    rub = currencys[6]
    console.log(usd,eur,rub)
    
})()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы