создание объекта из запросов мангуста - PullRequest
1 голос
/ 15 марта 2019

Как я могу сделать объект из результата запросов?В еде таблица функционирует с запросами к базе данных.Как я могу это сделать, если запросы асинхронные?

const returnResultOfQuery = () => {
  Dinner1300.count().exec(function (err, count) {

    const random = Math.floor(Math.random() * count)
  
    Dinner1300.findOne().skip(random).exec(
      function (err, result) {
        console.log(result)
      })
  })

const week = [
  {id: 1, day: 1},
  {id: 2, day: 2},
  {id: 3, day: 3},
  {id: 4, day: 4},
  {id: 5, day: 5},
  {id: 6, day: 6},
  {id: 7, day: 7},
]

const diet = week
  .map(value => ({
    id: value.id,
    day: value.day,
    meals: [
      returnResultOfQuery(),
      returnResultOfQuery(),
      returnResultOfQuery()
    ]
  }))

  console.log(diet)

1 Ответ

0 голосов
/ 15 марта 2019

Один из способов добиться этого - сначала выполнить все запросы, используя Promise.all, и, как только вы получите результаты, создайте новый объект.Что-то вроде:

const week = [
    { id : 1, day : 1 },
    { id : 2, day : 2 },
    { id : 3, day : 3 },
    { id : 4, day : 4 },
    { id : 5, day : 5 },
    { id : 6, day : 6 },
    { id : 7, day : 7 }
];

const returnResultOfQuery = () => {
    return Dinner1300.count ().exec ( function ( err, count ) { 
        const random = Math.floor ( Math.random () * count );

        return Dinner1300.findOne ().skip ( random ).exec (
            function ( err, result ) {
                console.log ( result );
                return result;
            } );
    } );
};

let promises = [];

for ( let x in week ) {
    promises.push ( returnResultOfQuery () );
    promises.push ( returnResultOfQuery () );
    promises.push ( returnResultOfQuery () );
}

let diet = [];

Promise.all ( promises ).then ( function ( result ) {
    let i = 0;
    for ( let x in week ) {
        diet.push (
            {
                id : x.id,
                day : x.day,
                meals : [
                    result[ i ],
                    result[ i + 1 ],
                    result[ i + 2 ]
                ]
            }
        );
        i = i + 3;
    }
} );

console.log ( diet );

PS: Я не проверял вышеуказанный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...