地图函数内的数组似乎接收数据,地图外是空的
Array inside an map function seems to receive data, outside the map it was empty
我正在用 NodeJS 和 Express 做一个简单的 GET 和 POST 只是为了学习一些关于 MySQL 数据库的 PrismaJS。我想将数组 grouped 的值传递给创建函数,当我在 map 函数内部使用 console.log(grouped) 时,我有我想要的值,在它外面保持空 [],当我将他传递给连接字段时也是如此。
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}]
}
}
})
}
问题出在 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,这条额外的行将等待 所有 地图的内部功能。
我正在用 NodeJS 和 Express 做一个简单的 GET 和 POST 只是为了学习一些关于 MySQL 数据库的 PrismaJS。我想将数组 grouped 的值传递给创建函数,当我在 map 函数内部使用 console.log(grouped) 时,我有我想要的值,在它外面保持空 [],当我将他传递给连接字段时也是如此。
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}]
}
}
})
}
问题出在 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,这条额外的行将等待 所有 地图的内部功能。