несколько агрегатных функций с парусами ждут функции доза не возвращает значения результата - PullRequest
0 голосов
/ 30 мая 2019

Мой код требует запуска нескольких агрегатных функций и объединения результатов каждого агрегатного вызова для получения окончательного набора данных результата.

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

  fn: async function (inputs, exits) {
  var users = await Logger.native(function(err, collection) {
        collection.aggregate([.......], function(err, results){
            return results;
        })
  })
  console.log(users)

  var users2 = await Logger.native(function(err, collection) {
        collection.aggregate([.......], function(err, results){
            return results;
        })
  })
  console.log(users2)

  return exits.success({results: {"user": users, "emp": users2});

Приведенный выше код дает неопределенных пользователей и значение user2. Любая идея, что я здесь упускаю или делаю не так.

1 Ответ

1 голос
/ 31 мая 2019

Вы не можете просто дождаться функции стиля обратного вызова и ожидать результата.Чтобы сделать это, вам нужно будет обернуть его внутри обещания, а затем ждать.

fn: async function(inputs, exits) {
        var users = await new Promise((resolve, reject) => {
            Logger.native(function(err, collection) {
                if (err) return reject(err)
                collection.aggregate([.......], function(err, results) {
                    if (err) return reject(err)
                    resolve(results)
                })
            })
        })
        console.log(users)

        var users2 = await new Promise((resolve, reject) => {
            await Logger.native(function(err, collection) {
                if (err) return reject(err)
                collection.aggregate([.......], function(err, results) {
                    if (err) return reject(err)
                    resolve(results);
                })
            })
        })
        console.log(users2)

        return exits.success({results: {"user": users, "emp": users2});

Обрабатывать ошибки обратного вызова, возвращая reject (err) и разрешая необходимые данные, когда вы получаете результаты с помощью resol (results)

...