Как ждать, пока данные не поступят с обещанием? - PullRequest
0 голосов
/ 25 января 2020

У меня есть 3 функции:

const getCategories = async () => {
  const categories = await db
    .collection('config/estate/categories')
    .get()
    .then(res => {
      const cats = []
      res.forEach(cat => {
        cats.push({
          id: cat.id,
          name: cat.data().label
        })
      })
      return cats
    })

  return categories
}

const getCategorySubTypes = async category => {
  const subTypes = await db
    .collection(`config/estate/categories/${category}/types`)
    .get()
    .then(res => {
      const cats = []
      res.forEach(cat => cats.push({ id: cat.id, name: cat.data().label }))
      return cats
    })

  return subTypes
}

exports.estateGetCategoriesWithSubTypes = functions.https.onRequest(async (req, res) => {
  const categories = await getCategories()

  const promises = categories.map(category => {
    getCategorySubTypes(category.id)
  })

  const subTypes = await Promise.all(promises)
  console.log(subTypes)
  res.status(200).send(subTypes)
})

В функции estateGetCategoriesWithSubTypes я хочу получить массив подтипов для всех категорий. У меня есть некоторые проблемы с обещаниями. Теперь у меня есть массив [undefined, undefined, undefined]. Помогите мне, пожалуйста, правильно организовать код!

Ответы [ 3 ]

1 голос
/ 25 января 2020

Исправьте ваш categories.map

Вам нужно вернуть что-то из функции, переданной методу .map, например:

exports.estateGetCategoriesWithSubTypes = functions.https.onRequest(async (req, res) => {
  const categories = await getCategories()

  const promises = categories.map(category => {
    return getCategorySubTypes(category.id) // <--- HERE
  })

  const subTypes = await Promise.all(promises)
  console.log(subTypes)
  res.status(200).send(subTypes)
})
0 голосов
/ 25 января 2020

Вы ничего не возвращаете со своей карты. Итак, пожалуйста, измените как:

const promises = categories.map(category => {
  return getCategorySubTypes(category.id)
})

Как показано ниже:

const array1 = [1, 4, 9, 16];
const map1 = array1.map(element => {
  return element /2;
});
console.log(map1);
0 голосов
/ 25 января 2020

Попробуйте добавить сюда возврат:

const promises = categories.map(category => {
  return getCategorySubTypes(category.id)
})

Или пропустите {} следующим образом:

const promises = categories.map(category => getCategorySubTypes(category.id))

Потому что теперь ваш map возвращает массив undefined ( вы не возвращаете данные туда).

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