gpt4 book ai didi

node.js - 在 NodeJS 中,如何在 Promise 中进行数据库查询?

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:16 25 4
gpt4 key购买 nike

NodeJS 6.9.3

我以前的经历是这样的:

名为“get_user()”的外部函数:

return database_queries.get_user(user_name)
.then(function(results_from_database) {

然后该函数使用 Knex 运行数据库调用,并返回:

            var dbquery = Multiline.stripIndent(function () {/*
SELECT
u.id as profile_id,
'user' as type_of_profile

FROM
user_profile u

WHERE name REGEXP "[[:<:]]||user_name||[[:>:]]"
*/});

dbquery = dbquery.replaceAll('||user_name||', user_name);

return DB.knex.raw(dbquery).then(function(result1) {

for(var index_of_results = 0; index_of_results < result1[0].length; index_of_results++) {

var document1 = result1[0][index_of_results];
array_of_maps_with_profile_type_and_profile_id[document1["type_of_profile"]].push(document1["profile_id"]);

}

当我这样做时,数据库查询运行并获取数据,但这是异步发生的,结果不会返回到外部函数。换句话说,外部函数早在数据库查询运行之前就已经完成。

所以我尝试将内部函数包装在 Promise 中:

function get_user(user_name) {

return new Promise(function(resolve, reject) {

resolve ()
.then(function() {

var dbquery = Multiline.stripIndent(function () {/*
SELECT
u.id as profile_id,
'user' as type_of_profile

FROM
user_profile u

WHERE name REGEXP "[[:<:]]||user_name||[[:>:]]"
*/});

dbquery = dbquery.replaceAll('||user_name||', user_name);

return DB.knex.raw(dbquery).then(function(result1) {

for(var index_of_results = 0; index_of_results < result1[0].length; index_of_results++) {

var document1 = result1[0][index_of_results];
array_of_maps_with_profile_type_and_profile_id[document1["type_of_profile"]].push(document1["profile_id"]);

}

现在数据库调用似乎从未被调用过。当它们运行时,它们会出现在日志中,但现在日志中没有出现数据库查询。看起来这个内部函数现在返回一个 Promise,但是 Promise 的“resolve()”部分从未被调用。

我在这里做错了什么?

最佳答案

这里有一个更简单的方法来编写基本相同的查询:

function get_user(user_name) {
const regex = `[[:<:]]${user_name}[[:>:]]`;
return DB.knex('user_profile')
.where(DB.knex.raw(`?? REGEXP ?`, ['name', regex]))
.then(res => {
// do what ever you like with returned rows here
});
}

关于node.js - 在 NodeJS 中,如何在 Promise 中进行数据库查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45534408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com