地图函数内的数组似乎接收数据,地图外它是空的

Posted

技术标签:

【中文标题】地图函数内的数组似乎接收数据,地图外它是空的【英文标题】:Array inside an map function seems to receive data, outside the map it was empty 【发布时间】:2021-11-22 00:28:02 【问题描述】:

我正在用 NodeJS 和 Express 做一个简单的 GET 和 POST,只是为了学习一点关于 PrismaJS 和 mysql 数据库的知识。我想将数组 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]
      
    
  )


【问题讨论】:

如果我的回答解决了您的问题 - 请批准 :) 【参考方案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,这条额外的行将等待所有地图的内部函数。

【讨论】:

谢谢,它确实有效。我还在学习如何使用 javascript 编写代码,所以关于基本概念还有很多内容需要介绍。

以上是关于地图函数内的数组似乎接收数据,地图外它是空的的主要内容,如果未能解决你的问题,请参考以下文章

React - 在地图功能中添加组件不添加

Swift - 即使在填充数据后数组似乎也是空的

异步等待在地图功能中无法正常工作

清空数组后,代码没有读取到它是空的

如何在 Yandex 地图套件中查找用户坐标?

Vue前后台数据交互实例演示,使用axios传递json字符串数组