Ожидание результата запроса MongoDB - PullRequest
0 голосов
/ 29 октября 2018

Я искал более старые ответы, но не могу понять, как настроить его для моего конкретного случая использования, также многие ответы кажутся устаревшими.

Консоль Node.js предупреждала об устаревании библиотеки обещаний, поэтому я попытался использовать Bluebird (безрезультатно). Если есть какое-то решение, мне решать, не обязательно быть Синей птицей.

Это мой код:

let shortInt;
count().then(result => shortInt = result).catch(err => console.log(err));
console.log("shortInt " + shortInt);
//doing some other stuff here

И функция, для которой мне нужно дождаться результата:

async function count() {
   let answer;
   await Url.findOne({}).sort({short_url:-1}).exec(function (err,ur) { if (err) return err; answer = ur.short_url });
   console.log("answer " + answer);
   return answer;
}

Для console.log (shortInt) я получаю 'undefined', а console.log (answer) всегда печатается в конце, после всех других операций.

Что мне нужно изменить, чтобы shortInt был установлен, прежде чем я продолжу // делать другие вещи.

Я установил mongoose.Promise = require ("bluebird"); чтобы не получить устаревшее предупреждение.

1 Ответ

0 голосов
/ 29 октября 2018

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

Вы можете переместить свой код в область разрешения разрешения.

count()
  .then(shortInt => {
    // we can access shortInt here
    // rest of code ...
  })
  .catch(err => console.log(err));
...