Создать случайные данные во время Promise.all - PullRequest
0 голосов
/ 29 ноября 2018

Я хотел бы создать фиктивные данные на основе массива JSON для тестирования внешнего интерфейса.

Структура объекта в массиве JSON:

Макет:

{
  category: string,
  items: string[]
}

Категория:

{
  name: string,
  products: Product[]
}

Продукт:

{
  name: string,
  prices: Price[]
}

Цена:

{
  date: Date,
  value: number
}

Я хотел бы создать случайные Price с для каждого Product, поэтому я создал следующую вспомогательную функцию:

// Creates Price array with random values within a given time window
// `times` is a `lodash` function
const getRandomPrices = (numberOfDays, minValue, maxValue) => times(numberOfDays, n => ({
  date: new Date(new Date().setDate(new Date().getDate() - n)),
  value: Math.floor(Math.random() * maxValue) + minValue
}))

И я заполняю базу данных MongoDB следующей функцией:

// data is Mock[]
// Price, Product and Category are MongoDB schemas
const createCategories = data.map(async c => {
  const createProducts = c.items.map(async p => {
    const prices = getRandomPrices(15, 100, 1000)
    const createPrices = prices.map(price => Price.create(price))

    return Product.create({
      name: p,
      prices: await Promise.all(createPrices)
    })
  })

  return Category.create({
    name: c.category,
    products: await Promise.all(createProducts)
  })
})

await Promise.all(createCategories)
console.log('done')

Моя проблема в том, что у меня такая же Price данные для любого Product в любом Category и мои вопросы:

  • как я могу рандомизировать цены?
  • где я делаю неправильно?
...