首页 > 解决方案 > 为什么我第一次使用异步它会给我一个空数组?

问题描述

我正在使用 Node.js 在 JS 中制作应用程序。我正在尝试使用异步/等待功能。

当我执行下面的代码时,第一次发出 get 请求时,它给了我一个空数组,如果我发出第二次 get 请求,它给了我完整的数组。为什么会这样?

    var sql = `SELECT * FROM Pietanza`;
    await db.query(sql, (error, result, fields)=>{
        if(error){
            throw error;
        }
        //console.log(JSON.stringify(result));
        result.forEach(j => {
            var temp = j;
            //retrieving indicatori (spicy, vegan for example)
            sql = `SELECT indicatore FROM pietanza_indicatore WHERE pietanza = '${temp.nome}'`;
            db.query(sql, (error, result, fields)=>{
                if(error) throw error;
                temp.indicatori = new Array();
                 result.forEach(ind => {
                    temp.indicatori.push(ind.indicatore);
                    //console.log(temp);
                });
            });
            pietanze.menu.push(temp);
        });
        //console.log(pietanze);
    });
    //sends the JSON menu
    //console.log(pietanze);
    res.json(pietanze);
});```

Thank you in advance.

标签: javascriptnode.jsarraysasync-awaitbackend

解决方案


您正在混合async/await和回调。那是行不通的,因为await不会等待回调完成。

如果你想用await语法大致如下(假设数据库包支持promises)

try {
  let outerresult = await db.query(outersql);
  ...
  for (let row of outerresult) {
     ...
     let innerresult = await db.query(innersql);
     ...
  }

} catch (error) {
  // Do the error handling
}

你也不能使用Array.forEachwithasync/await因为它不支持异步回调。


推荐阅读