Как прочитать разрешенное значение Promise из вызова функции

Всего у меня есть 2 функции, одна функция, которая возвращает новое обещание и разрешается в переменную, например:

  function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
  }

а затем еще одна функция, где я вызываю эту функцию, а затем вставляю для переменной data объект JSON.

    function getInfo() {
     return promiseTest(require('./allData.json'));
    }

Итак, мой вопрос: как мне прочитать данные, которые Promise разрешает из функции getInfo, просто в простом console.info?

Скажите: console.info(getInfo().data) (но, очевидно, это не работает, но, надеюсь, поможет с тем, что мне нужно).

Вы не можете просто волшебным образом сделать асинхронную операцию синхронной. Используйте async/await, передавайте обратные вызовы или используйте .then.

jonrsharpe 03.03.2019 23:37
Поведение ключевого слова "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) для оценки ваших знаний,...
3
1
1 140
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

С промисами вы должны использовать/извлекать данные, используя .then(); так

getInfo().then((data) => console.info(data));

Есть ли особая причина, по которой вам нужно использовать обещание? Ваш пример подходит для простого использования функции setTimeout

Значение, которое возвращает обещание, передается в качестве первого параметра в функцию .then.

См.: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

В вашем случае это может быть: getInfo().then(данные => console.info(данные));

Надеюсь это поможет.

Есть несколько способов сделать это.

Асинхронно/ждите

JavaScript представил ключевые слова async и await несколько лет назад. Это специальный синтаксис, упрощающий асинхронное программирование. Вы можете создавать свои функции async и использовать await при их вызове. Это в основном обертывает весь беспорядок . then().

async function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


async function getInfo() {
    return await promiseTest(require('./allData.json'));
}

Затем вы можете получить результат getInfo(), ожидая его:

console.info(await getInfo());

Вот некоторые чтения, которые должны вам помочь:

https://javascript.info/async-ожиданиеhttps://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/async_function

.тогда()

Вы также можете пойти по-старому, используя then:

function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


function getInfo() {
    return promiseTest(require('./allData.json'));
}

getInfo().then(data => console.info(data));

Передать обратный вызов

Вы можете передать обратный вызов вашему методу getInfo.

function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


function getInfo(callback) {
    promiseTest(require('./allData.json')).then(data => callback(data));
}

getInfo(data => console.info(data));

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