Digiport
@Digiport
PHP рулит

Снова async/await, как синхронно получить результат запроса в переменную?

Пожалуйста, помогите!
Не могу побороть асинхронный запрос к базе nedb.
Как получить список записей в переменную res?

const Datastore = require('nedb-promises')
let datastore = Datastore.create('./database/test.db')

var res = (async () => {
await datastore
      .find({})
      .then(function(docs){
          console.log(docs) // здесь возвращает списк
          return docs
      })
})()
console.log(res) // здесь вместо списка Promise { <pending> }
  • Вопрос задан
  • 481 просмотр
Пригласить эксперта
Ответы на вопрос 6
Lynn
@Lynn
nginx, js, css
Никак.
Вообще никак.
Нет, и так тоже не получится.
Ответ написан
@EmelyanovKonstantin
GIS архитектура, аналитика, разработка
Уберите .then
Ответ написан
@McBernar
Последний консоль.лог не будет ждать вашего async. С чего ему это делать?

А вот все, что написано внутри async, будет ждать await.
Ответ написан
@DLeo13
Друг, ты сделал промис без return. Вставь return у стрелочной функции. Сейчас функция ничего не возвращает. Но глобально участок кода так себе.

P.S. Внутри then тоже не имеет return. Напиши return Promise.resolve(data), если тебе консоль нужна еще
Ответ написан
Комментировать
@Sn0oSm0oMrIK
В твоём примере с питоном значение тоже выводится в асинке. Почему в ноде это не устраивает?
Ответ написан
Комментировать
@p1kaso
Для работы синхронно с асинхронными запросами используйте Promise.all, должно помочь в вашем случае.

const Datastore = require('nedb-promises')
let datastore = Datastore.create('./database/test.db')

Promise.all([datastore.find({})]).then(res=>console.log(res))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы