Вывести переменную за пределы функции и передать её в следующую функцию [дубликат]

107
08 апреля 2021, 23:20
На этот вопрос уже даны ответы здесь:
Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания (3 ответа)
Закрыт 1 год назад.

Написал код для открытия текстового файла:

var log_txt = new XMLHttpRequest();
var online_txt;
log_txt.open("GET","log.txt");
log_txt.send();
//log_text.onload = log_txt_func(online_txt);
var online_txt = log_txt_func(online_txt);
console.log(log_txt_func(online_txt));
//console.log(date_txt);
function log_txt_func(online_txt) {
    log_txt_arr = log_txt.responseText.split("\r\n");
    log_txt_arr.forEach(date_txt_arr);
    log_txt_arr.forEach(online_txt_arr);
    var date_txt = date_txt.split(",");
    var online_txt = online_txt.split(",");
    online_txt.splice(0, 1);
    date_txt.splice(0, 1);
        function date_txt_arr(value){
            date_txt = date_txt + value.split(" ==> ")[0] + ',';
        }
        function online_txt_arr(value){
            online_txt = online_txt + value.split(" ==> ")[2] + ',';
        }
    //console.log(online_txt);
    //console.log(date_txt);
    return online_txt;
    //return date_txt;
}
document.addEventListener("DOMContentLoaded", function(){
    let online = new liteChart("chart");
    online.setLabels(date_txt);
    online.addLegend({"name": "Online", "stroke": "#3759d7", "fill": "#fff", "values": online_txt});
    let div = document.getElementById("online");
    online.inject(div);
    online.draw();
});

Подскажите пожалуйста, как можно вывести переменные online_txt и date_txt за пределы функции? Внутри функции log_txt_func() всё работает на ура, а за пределами не получается? После вывода данных мне нужно их передать в следующую функцию, для составления графика

Answer 1

Я попытался отрефакторить хоть как-то ваш код, он честно говоря был ужасен. Не уверен на счет рабочести, но можете протестить.

const dateTxtArr = [];
const onlineTxtArr = [];
async function logTxt(){
    let data = await fetch('log.txt');
    const logTxtArr = data.split("\r\n");
    for (const value of logTxtArr){
        const arr = value.split(' ==> ');
        dateTxtArr.push(arr[0]);
        onlineTxtArr.push(arr[2]);
    }
}
document.addEventListener("DOMContentLoaded", async function(){
    await logTxt()
    let online = new liteChart("chart");
    online.setLabels(dateTxtArr);
    online.addLegend({"name": "Online", "stroke": "#3759d7", "fill": "#fff", "values": onlineTxtArr});
    let div = document.getElementById("online");
    online.inject(div);
    online.draw();
});
Answer 2

Объявите эти переменные глобально и передавайте в функцию в качестве аргументов.

READ ALSO
Как правильно делать вложенные ячейки для таблицы с React MATERIAL-UI?

Как правильно делать вложенные ячейки для таблицы с React MATERIAL-UI?

Как реализовать подобную таблицу с использованием React MATERIAL-UI?

92
Почему onclick не работает? [дубликат]

Почему onclick не работает? [дубликат]

Уже много времени ломаю голову над событием onclickПодскажите, почему то что стоит в событии onclick (к примеру, просто console

108