NodeJs Возвращение данных из asyn c извлечение переменной для повторного использования - PullRequest
0 голосов
/ 03 марта 2020

Я искал несколько часов (безуспешно), как заставить асинхронную функцию c возвращать результат, сохранять его в переменной вне функции и повторно использовать эти данные.

Моя проблема в том, что я получаю одни и те же данные снова и снова в некоторых моих функциях, которые кажутся ненужными.

По сути, это то, что я хочу, и сейчас оно возвращает обещание.

    let leads;
    try {
        var result = await fetch('http://localhost:3000/lds');
        leads = await result.json();
        return leads;

    } catch (e) {
        // handle error
        console.error(e)
    }
}

var results = readDb();
console.log(results);

Например, изначально я запускаю функцию извлечения данных и создания таблицы.

Во-вторых, я запускаю другую функцию, которая выбирает те же данные для создания кнопок нумерации страниц.

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

В идеале я бы выбрал только данные один раз.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Мы можем определить leads вне функции и проверить, нужно ли ее извлекать:

let leads;
const getLeads = async function() {

    try {
        if (!leads) { // fetch leads only they weren't already loaded
            const result = await fetch('http://localhost:3000/lds');
            leads = await result.json();
        }
        return leads;

    } catch (e) {
        // handle error
        console.error(e)
    }
}
0 голосов
/ 03 марта 2020

Поскольку вы используете async/await, вам нужно await значение, однако оно доступно только в функции async. Вы можете повторно использовать переменную вне функции для сохранения значения после его загрузки.

// reuse leads variable
let leads;

// async function to populate/return leads
async function readDb() {
  // only populate if it is undefined
  if (typeof leads === 'undefined') {
    const result = await fetch('http://localhost:3000/lds');
    leads = await result.json();
  }
  // return just loaded or referenced value
  return leads;
}

// call the function asynchronously 
(async function(){
  // await the results here inside an async function
  const results = await readDb();
  console.log(results);
}());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...