Запуск запроса сохранения mongoose в цикле forEach

#javascript #node.js #mongodb #mongoose

#javascript #node.js #mongodb #mongoose

Вопрос:

У меня есть следующий запрос от моего преобразователя graphql:

   setFeatured: async function ({ id }, req) {
    const post = await Post.findById(id)
    const posts = await Post.where('_id').ne(id)
    post.featured = true
    await post.save()
    posts.forEach(pst => {
      pst.featured = false
      await post.save()
    })
    return true
  }  

С помощью приведенного выше фрагмента кода я хочу установить статус сообщения, которое не выбрано пользователем, на false и наоборот.

Но я получаю эту ошибку в своей консоли

Ошибка синтаксиса: ожидание допустимо только в асинхронной функции, указывающей на строку await post.save() внутри цикла forEach.

Как мне выполнить этот save() запрос для каждого сообщения?

Ответ №1:

Вам также необходимо установить асинхронность для обратного вызова, переданного forEach.

 posts.forEach(async pst => {
    pst.featured = false
    await post.save()
})

  

Другой подход к вашему, если в любой момент времени есть одно избранное сообщение, вы можете отделить избранное поле от сообщений и иметь единую запись, которая хранит идентификатор записи.