Digiport
@Digiport
WebBasic CMS

Снова 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> }
  • Вопрос задан
  • 334 просмотра
Пригласить эксперта
Ответы на вопрос 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))
Ответ написан
Ваш ответ на вопрос

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

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