NodeJS - 无法正确创建递归 MySQL 请求

Posted

技术标签:

【中文标题】NodeJS - 无法正确创建递归 MySQL 请求【英文标题】:NodeJS - unable to create a recursive MySQL request properly 【发布时间】:2022-01-14 04:44:58 【问题描述】:

我有一个名为categories 的表,它应该包含我网站上可用文章的类别。我想在表中有一个父子系统,其中没有父项的类别的parent 列的值为0。具有父类别的类别将在其 parent 列中保存其父类别的 ID。

为了查询它,我创建了这个函数:

function categoryTree(table, parent = 0) 
    var categTreeArr = [];
    return new Promise(resolve => 
        dbCon.promise().execute("select * from " + table + " where parent = " + parent, []).then(function (err, result, fields) 
            result.forEach(e => 
                var categTreeArrNext = categoryTree(table, e.id).then((value) => 
                    categTreeArr.push([e.img, e.name, e.slug, value]);
                );
            );
            resolve(categTreeArr);
        )
    )

在我的索引页面上,我使用了这段代码来调用函数:

categArr = myModule.categoryTree("course_category", 0).then(value => 
            setValue(row, response, value)
            console.log(value)
);

这给了我一个UnhandledPromiseRejectionWarning。请帮忙。

PS:我是 NodeJS 的新手。如果这个问题有任何错误,请不要举报。如果问题不清楚,我会在评论中澄清。

【问题讨论】:

【参考方案1】:

显然,您的承诺被拒绝,并且没有 catch 块来处理它。尝试捕捉整个函数,看看实际发生了什么。

categArr = myModule.categoryTree("course_category", 0).then(value => 
            setValue(row, response, value)
            console.log(value)
).catch(e => console.log(e));

【讨论】:

我发现相反 - 我没有创建一个查询数据库并对结果进行相应排序的函数,而是在索引页面内调用 mysql2 查询,然后将其传递给一个对其进行排序的函数以父子树的形式。这样我可以使代码更简单并避免错误。不过感谢您的回复-将来会有所帮助:)

以上是关于NodeJS - 无法正确创建递归 MySQL 请求的主要内容,如果未能解决你的问题,请参考以下文章

错误 1452 MySQL 和 NodeJS。为啥数据库不能正确引用我的表?

使用 NodeJS 在 mysql 中未正确保存日期(比实际日期少一天)

通过 PHP 使用 mysql 进行递归树遍历

MySQL 和 NodeJs

使用 dcrypt 对密码进行哈希处理后,使用 MySQL 中的 NodeJs 登录用户

npm : 无法将“npm”项识别为 cmdlet函数脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。