#javascript #reactjs
#javascript #reactjs
Вопрос:
Всего у меня есть 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.log?
Скажите: console.log(getInfo().data)
(но, очевидно, это не работает, но, надеюсь, поможет с тем, что мне нужно).
Комментарии:
1. Вы не можете просто волшебным образом сделать асинхронную операцию синхронной. Используйте async / await, передавайте обратные вызовы или используйте .then .
Ответ №1:
С promises вы должны использовать / извлекать данные с помощью a .then(); так что
getInfo().then((data) => console.log(data));
Есть ли особая причина, по которой вам нужно использовать promise? Ваш пример, похоже, подходит для простого использования функции setTimeout
Ответ №2:
Есть несколько способов сделать это.
Асинхронный / ожидающий
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.log(await getInfo());
Вот некоторые чтения, которые должны вам помочь:
https://javascript.info/async-await
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/async_function
.then()
Вы также можете использовать старый способ, используя 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.log(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.log(data));
Ответ №3:
Значение, возвращаемое promise, передается в .then
функцию в качестве первого параметра.
Пожалуйста, смотрите: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
В вашем случае это может быть: getInfo().then(data => console.log(данные));
Надеюсь, это поможет.