Сохраните в переменную console.info()

Сейчас я начинаю с javascript. Я ищу совет или руководство, так как не могу продвинуться дальше. Нужно ли мне сохранять результат строки 70 console.info(html) в переменной (const, let или var)? Есть какие-нибудь советы, как это сделать? Я попробовал аргументы и возврат в функции runRtfjs, но это не сработало. Мне нужно сохранить его в переменной, чтобы позже отобразить в HTML.

const jsdom = require("jsdom");
const {JSDOM} = jsdom;

const filertf =
    `{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Calibri;}}
    {\\*\\generator Msftedit 5.41.21.2510;}\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang9\\f0\\fs22 This \\fs44 is \\fs22 a \\b simple \\ul one \\i paragraph \\ulnone\\b0 document\\i0 .\\par
    }`;

function stringToArrayBuffer(string) {
    const buffer = new ArrayBuffer(string.length);
    const bufferView = new Uint8Array(buffer);
    for (let i = 0; i < string.length; i++) {
        bufferView[i] = string.charCodeAt(i);
    }
    return buffer;
}

function runRtfjs(rtf, callback, errorCallback) {
    const virtualConsole = new jsdom.VirtualConsole();
    virtualConsole.sendTo(console);

    new JSDOM(`
    <script src = "./node_modules/rtf.js/dist/WMFJS.bundle.js"></script>
    <script src = "./node_modules/rtf.js/dist/EMFJS.bundle.js"></script>
    <script src = "./node_modules/rtf.js/dist/RTFJS.bundle.js"></script>

    <script>
        RTFJS.loggingEnabled(false);
        WMFJS.loggingEnabled(false);
        EMFJS.loggingEnabled(false);

        try {
            const doc = new RTFJS.Document(rtfFile);

            const meta = doc.metadata();
            doc.render().then(function(htmlElements) {
                const div = document.createElement("div");
                div.append(...htmlElements);

                window.done(meta, div.innerHTML);
            }).catch(error => window.onerror(error))
        } catch (error){
            window.onerror(error)
        }
    </script>
    `, {
        resources: "usable",
        runScripts: "dangerously",
        url: "file://" + __dirname + "/",
        virtualConsole,
        beforeParse(window) {
            window.rtfFile = stringToArrayBuffer(rtf);
            window.done = function (meta, html) {
                callback(meta, html);
            };
            window.onerror = function (error) {
                errorCallback(error);
            };
        }
    });
};


runRtfjs(
    filertf,
    (meta, html) => {
        //console.info("Meta:");
        //console.info(meta);
        //console.info("Html:");
        console.info(html);
    },
    error => console.error(error)
    );

Я попробовал аргументы и возврат в функции runRtfjs, но это не сработало.

Это уже есть в переменной, она называется html. Я думаю, ваша проблема в том, что вы еще не понимаете асинхронность.

CherryDT 14.06.2024 23:22

Отвечает ли это на ваш вопрос? Как вернуть ответ на асинхронный вызов?

CherryDT 14.06.2024 23:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Объявите переменную вне функции для хранения результата. Измените функцию runRtfjs, чтобы установить переменную с содержимым HTML. Используйте переменную после выполнения функции.

Ответ принят как подходящий

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

Если его нужно повторно использовать в той же области, вы можете использовать let вместо var.

var htmlData;
runRtfjs(
  filertf,
  (meta, html) => {
       htmlData = html;
       console.info(html);
       
  },
      error => console.error(error)
  );

var возвращается как неопределенная var htmlData; runRtfjs( filertf, (meta, html) => { htmlData = html; }, error => console.error(error) ); console.info(htmlData)

Flávio 14.06.2024 23:05

Это потому, что вы получаете доступ к переменной еще до того, как ваша функция записала в нее данные. Любой код, использующий результат, должен находиться в обратном вызове, как изначально был ваш console.info, чтобы он мог запуститься после завершения вашей функции, а не сразу.

CherryDT 14.06.2024 23:23

Другие вопросы по теме