Возврат двух запросов в NodeJS в одной модели. Обещание {<pending>} - PullRequest
0 голосов
/ 05 апреля 2020

У меня следующая проблема:

exports.displayArea = (area_id) => {
  console.log(area_id);
  return client
    .query(`SELECT * FROM areas WHERE area_id = ${area_id}`)
    .then(({ rows, rowCount }) => {
      let newInfo = rows[0];
      newInfo.restaurants = client
        .query(`SELECT * FROM rated_restaurants WHERE area_id = ${area_id}`)
        .then(({ rows }) => {
          return rows;
        });
      newInfo.total_restaurants = rowCount;
      return newInfo;
    });
};

Я пытаюсь вернуть второй запрос, однако он дает мне обещание {}. Как мне go вернуть два из них?

{
  area_id: 2,
  area_name: 'Knutsford',
  restaurants: Promise { <pending> },
  total_restaurants: 1
}

В конечном итоге это должно выглядеть так:

{
    area_id: 3,
    name: 'Picadilly',
    total_restaurants: 2,
    restaurants: [
      {
        restaurant_id: 12,
        area_id: 3,
        name: 'Carluccio’s',
        cuisine: 'Italian',
        website: 'http://www.carluccios.com/'
      }
    ]
}

Большое спасибо,

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Как насчет следующего:

exports.displayArea = (area_id) => {
    console.log(area_id)

    var q1 = client
        .query(`SELECT * FROM areas WHERE area_id = ${area_id}`)
        .then(({ rows, rowCount }) => {
            return [rows, rowCount]
        })

    var q2 = client
        .query(`SELECT * FROM rated_restaurants WHERE area_id = ${area_id}`)
        .then(({ rows }) => {
            return rows
        })

    return Promise.all([q1, q2]).then(function ([resultQ1, resultQ2]) {
        let newInfo = resultQ1[0][0]
        newInfo.restaurants = resultQ2
        newInfo.total_restaurants = resultQ1[1]
        return newInfo
    })
}
1 голос
/ 05 апреля 2020

Если я понял. Вы выполнили два запроса, и конечный результат - это объект, ожидающий обещания. OKI смотри enter image description here

ты не ждешь этого обещания, чтобы решить

newInfo.restaurants = client
        .query(`SELECT * FROM rated_restaurants WHERE area_id = ${area_id}`)
        .then(({ rows }) => {
          return rows;
        });
exports.displayArea = (area_id) => {
  console.log(area_id);
  let newInfo
  return client
    .query(`SELECT * FROM areas WHERE area_id = ${area_id}`)
    .then(({ rows, rowCount }) => {
       newInfo = rows[0];
       newInfo.total_restaurants = rowCount;
      return client
        .query(`SELECT * FROM rated_restaurants WHERE area_id = ${area_id}`)
        .then(({ rows }) => {

            newInfo.restaurants = rows;
          return newInfo;
        });
    });
};

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