#javascript #node.js #arrays #express #prisma
Вопрос:
Я делаю простое ПОЛУЧЕНИЕ и ПУБЛИКАЦИЮ с помощью NodeJS и Express только для того, чтобы немного узнать о PrismaJS с базой данных MySQL. Я хочу передать значение массива, сгруппированного в функцию создания, когда я использую console.log(сгруппированный), внутри функции карты у меня есть нужные значения, снаружи она остается пустой [], также когда я передаю его в поле подключения.
async function createUser(name, email, groups) {
const grouped = [];
groups.map(async (item) => {
const exist = await prisma.group.findUnique({where: {id: item }})
if(exist) {
grouped.push({id: item})
console.log(grouped) //here is ok
} else {
console.log(`Group ${item} does not exist`)
}
})
console.log(grouped) //here he is []
const creating = await prisma.user.create({
data: {
name: name,
email: email,
groups: {
connect: grouped //here he is [], should be like [{id: 1}, {id: 2}]
}
}
})
}
Комментарии:
1. если мой ответ устранил вашу проблему — пожалуйста, одобрите его 🙂
Ответ №1:
проблема в async (item) => { ...
том, что я имею в виду функцию map
функции … вам следует дождаться завершения всей внутренней функции карты, поэтому просто измените свой код на следующий:
async function createUser(name, email, groups) {
const grouped = [];
await Promise.all(groups.map(async (item) => {
const exist = await prisma.group.findUnique({where: {id: item }})
if(exist) {
grouped.push({id: item})
console.log(grouped) //here is ok
} else {
console.log(`Group ${item} does not exist`)
}
})
)
console.log(grouped) //here he is []
const creating = await prisma.user.create({
data: {
name: name,
email: email,
groups: {
connect: grouped //here he is [], should be like [{id: 1}, {id: 2}]
}
}
})
}
обратите внимание на Promise.all()
iv’e, добавленное перед картой, эта дополнительная строка будет ждать всех внутренних функций карты.
Комментарии:
1. Спасибо, это действительно работает. Я все еще учусь писать код с помощью JavaScript, так что есть много вопросов, касающихся основных концепций.