【问题标题】:RowDataPacket returns empty object but it is not empty [React/Next]RowDataPacket 返回空对象但它不是空的 [React/Next]
【发布时间】:2021-12-30 12:55:56
【问题描述】:

我一直在努力解决这个问题,但我已经筋疲力尽了。我正在调用我的无服务器 mysql,试图从团队中获取看板。我已经多次使用此方法并且一切正常,但这很可能是因为它们只返回单个项目而这返回多个项目。

这是我返回空对象的代码。

async function getKanbans(team_id){
    let kanbans = [];
    await sql_query(`SELECT id, sName FROM table WHERE iTeam = ?`, [team_id])
    .then(result => {
        result.forEach(kanban => {
            // console.log(kanban);
            kanbans.push({
                id: kanban.id,
                name: kanban.sName
            });
        });
    })
    .catch(err => {
        console.log(err);
    });

    console.log(kanbans);
    return kanbans;
}

如您所见.. 我正在尝试打印看板,但确实得到了:

[
  { id: 1, name: 'Kanban_1' },
  { id: 2, name: 'Kanban_2' }
]

摆脱它。然后我试图将它返回给调用此函数的项目,这就是它的样子:

teams.push({
   id : team.id,
   sName : team.sName,
   sColor : team.sColor,
   aKanbans : result[0]['selectedTeam'] == team.id ? getKanbans(team.id) : null,
});

(更大的东西的小sn-p)

好的,现在当我尝试查看数据响应(来自前端)时,我得到了:

{
  "success": true,
  "message": "Found teams",
  "teams": [
    {
      "id": 1,
      "sName": "Team1",
      "sColor": "#fcba03",
      "aKanbans": {}
    },
    {
      "id": 2,
      "sName": "Team2",
      "sColor": "#2200ff",
      "aKanbans": null
    }
  ]
}

来自 Team1 的看板是空的、空的对象。我到底要做什么?我尝试映射它,但仍然得到一个空对象。 React/javascript 不是我的主要语言,我只是喜欢学习。有什么建议吗?

【问题讨论】:

  • 你在哪里打电话teams.push(...)?你能提供使用它的函数的完整代码吗?另外,getKanbans 是一个异步函数,所以你需要为它await,即result[0]['selectedTeam'] == team.id ? await getKanbans(team.id) : null
  • @juliomalves 当然,你去pastebin.com/TA7g0nRb
  • 这能回答你的问题吗? Wait for forEach with a promise inside to finish

标签: mysql reactjs api next.js


【解决方案1】:

您正在将 async / await 函数与正常的 Promises 处理混合使用。

尝试像这样更改您的getKanbans 代码:

async function getKanbans(team_id) {
  let kanbans = [];
  try {
    const result = await sql_query(
      `SELECT id, sName FROM table WHERE iTeam = ?`,
      [team_id]
    );
    result.forEach((kanban) => {
      kanbans.push({
        id: kanban.id,
        name: kanban.sName,
      });
    });
  } catch (err) {
    console.log(err);
  }

  return kanbans;
}

然后使用(声明父级async)填充团队:

teams.push({
    id : team.id,
    sName : team.sName,
    sColor : team.sColor,
    aKanbans : result[0]['selectedTeam'] == team.id ? getKanbans(team.id) : null,
 });

【讨论】:

  • 我创建了一个包含您告诉我要做的更改的 pastebin:pastebin.com/TA7g0nRb 新错误:错误:错误:在非异步函数 aKanbans 中不允许等待:结果 [0]['selectedTeam '] == team.id ? --> await
  • 尝试在getKanbans函数调用之前删除await
  • 它仍然返回看板:Object {} :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 2020-09-17
  • 2020-07-13
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多