Как использовать определенные переменные EJS внутри интерфейса JavaScript? [Дубликат]

ECMAScript 6 имеет «генераторы», которые позволяют вам легко программировать в асинхронном стиле.

function* myGenerator() {
    const callback = yield;
    let [response] = yield $.ajax("https://stackoverflow.com", {complete: callback});
    console.log("response is:", response);

    // examples of other things you can do
    yield setTimeout(callback, 1000);
    console.log("it delayed for 1000ms");
    while (response.statusText === "error") {
        [response] = yield* anotherGenerator();
    }
}

Для запуска вышеуказанного кода вы делаете это:

const gen = myGenerator(); // Create generator
gen.next(); // Start it
gen.next((...args) => gen.next([...args])); // Set its callback function

Если вам нужно настроить таргетинг на браузеры, которые не поддерживают ES6, вы можете запустить код через Babel или short-compiler для генерации ECMAScript 5.

Обратный вызов ...args завернут в массив и разрушен, когда вы их читаете так что шаблон может справиться с обратными вызовами, которые имеют несколько аргументов. Например, с узлом fs :

const [err, data] = yield fs.readFile(filePath, "utf-8", callback);

3
задан trysis 1 October 2014 в 05:02
поделиться

2 ответа

Эти переменные не передаются автоматически на клиентский код; как вы говорите, они доступны для кода в ваших шаблонах просмотров. Аналогично, и переменные, определенные в res.locals (или app.locals , которые имеют тот же API), будут доступны как локальные переменные в любых представлениях.

Если вы хотите сделать их доступными для кода на стороне клиента, вам придется вручную отправить их как часть ответа в форме, доступной для клиентского JavaScript. Например, вы можете записать их в тег <script>, как это делается здесь: Доступ к локальным переменным Express.js на стороне клиента JavaScript .

3
ответ дан Community 24 August 2018 в 05:00
поделиться

Эти переменные используются для визуализации представления только на стороне сервера. Очевидно, некоторые из этих значений попадают в HTML-ответ на стороне сервера, но вы, вероятно, захотите посмотреть на модуль, такой как sharify , если вы хотите сериализовать их в JSON, внедрить в <script> в HTML и получить доступ к ним в JavaScript-коде браузера.

2
ответ дан Peter Lyons 24 August 2018 в 05:00
поделиться
Другие вопросы по тегам:

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