Express Узел - Возвращает результаты поиска ПН goose в переменную. - PullRequest
0 голосов
/ 14 апреля 2020

Я собираюсь вернуть type_item на стороне клиента, но я не могу вернуть Mon goose результаты в переменную type_item [i] .items, она ничего не возвращает ...

Как вернуть результаты получения данных mon goose в type_item?

var type_item = [
  {
    type_name : "Item A",
    type : "1",
    items : []
  },
  {
    type_name : "Item B",
    type : "2",
    items : []
  },
  {
    type_name : "Item C",
    type : "3",
    items : []
  },
]
for (var i = 0; i < type_item.length; i++) {
  var populateQuery = {
      path: 'item',
      model: "Item",
      match: {
          type: type_item[i].type,
          is_publish: true
      },
      select: 'img_item merchant price item_name',
      populate: {
          path: 'merchant price',
          select: 'merchant_name usd_price eur_price'
      }
  }

  var items = VariantItems.find()
    .select('is_available total_stock exp_date')
    .populate(populateQuery)
    .limit(5)
    .exec(function (err, data) {
        if (err) {
            res.status(500).send(err)
        } else {
            var results = []
            for (var j = 0; j < data.length; j++) {
              if (data[j].merchant != null) {
                  results.push(data[j])
              } 
            }
            return results
        }
    })
  type_package[i].items = items
  console.log(items);
}
res.status(200).send({
              status: 200,
              iserror: false,
              message: 'Get List Items Success!',
              data: type_item
          })

Результат, когда я регистрирую элементы

Promise { <pending> }
Promise { <pending> }
Promise { <pending> }

Пожалуйста, помогите мне ... Спасибо:)

1 Ответ

0 голосов
/ 14 апреля 2020

Вы получаете обещание, поэтому вам нужно выполнить обещание, чтобы получить результат

Вам необходимо указать следующие варианты:

  • Либо использовать .then

    var items = Items.find () .select ('is_available total_stock exp_date') .populate (populateQuery) .limit (5) .exe c (ваша функция) .then (результат => результат) .catch (err = > err)

  • Или используйте функцию Asyn c в ожидании ES6

Вам необходимо сделать функцию asyn c перед использованием ключевое слово await

app.post("/routename", async(req,res)=>{

    var items = await Items.find()
        .select('is_available total_stock exp_date')
        .populate(populateQuery)
        .limit(5)
        .exec(//logic)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...