首页 > 解决方案 > 在执行结果之前等待 sql 并推送到数组

问题描述

我正在使用mysql npm 包从数据库中获取数据。我的目标是从 Table 添加每个list(id)lists并将其推送到lists数组中。我从数据库中获取了正确的数据,但是当我result查询lists数组为空时。

我认为我必须在代码中添加asyncawait才能使其工作。在几个地方尝试过,但我没有成功。知道我做错了什么吗?

// GET - get all grocery_lists
Grocery_list.getAll = (result) => {
  let lists = []; // <--- List Array

  sql.query("SELECT id FROM lists", (err, res) => { // <--- Get all id from 'lists' table
    if (err) {
      console.log(err);
    }

    res.forEach(list => { // <--- Loop thru all lists
      sql.query(`
        SELECT items.id, items.name, items_x_lists.purchased
        FROM items_x_lists
        INNER JOIN items ON items_x_lists.itemId = items.id
        WHERE items_x_lists.listId = ${list.id};
      `, (err, res) => { // <--- Get all items for ${list.id}  from 'items' table
        if (err) {
          console.log(err);
        }

        const list = {};
        list.id = res.id;

        console.log(list); // <--- { id: 1 } ... { id: 2 }
        lists.push(list);


      });
    });
    result(null, lists); // <--- returning empty array instead of [{ id: 1 }, { id: 2 }]
  });
};

标签: javascriptmysqlnode.jsasync-await

解决方案


这可能是解决方案

Grocery_list.getAll = async (result) => { return sql.query("SELECT id FROM lists", (err, res) => { // <--- Get all id from 'lists' table if (err) { console.log(err); } }); };


推荐阅读