gpt4 book ai didi

node.js - 如何在node.js中处理mongoDB常规操作

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

我正在尝试准备一个通用函数,它允许我在任何数据库/集合上使用任何函数。我不确定我这样做是否正确。这是我在 node.js 中的函数代码:

function use_db(db_url, func, ...args) {
let prom;
// noinspection JSIgnoredPromiseFromCall
var lele = MongoClient.connect(db_url, (error, client) => {
console.log('Connected');
const db = client.db();

console.log(db);

prom = func(db, ...args);
client.close();
console.log('Disconnected successfully');
});
console.log(lele, 'whaat?');
return prom;
}

我希望它返回值 prom但这种情况发生了:

  • 第一个输出是 console.log(lele, 'whaat?');哪个值为 undefined 'whaat?'

  • 然后'Connected'

  • 最后一个是 'Disconnected successfully'

很明显prom目前尚未定义

为什么输出是这样的顺序?为什么console.log(lele, 'whaat?');首先运行?有什么想法可以改进此功能,以便它可以使用任何其他功能来处理特定的 mognoDB 数据库吗?

编辑://

function connectDB(db_url) {
return new Promise((res, rej) => {
MongoClient.connect(db_url, (error, client) => {
if (error) return rej(error);
console.log('Connected');
const db = client.db();
return res({
db,
client
});
});
});
}

async function use_db(db_url) {
console.log('Start');
const {
db,
client
} = await connectDB(db_url);
console.log('After db connection');

return [db, client];
}

let temp_list = use_db(db_url);
const db = temp_list[0];
const client = temp_list[1];

let no_user = can_create_user(db, temp_email);

if(no_user) {
//some code
}

如何保持与数据库的事件连接并使用db每次都用于其他功能吗?它不会等待 promise 解决

最佳答案

Node.js 是异步的,它不等待任何阻塞操作。 check this

function connectDB(db_url) {
return new Promise((res, rej) => {
MongoClient.connect(db_url, (error, client) => {
if (error) return rej(error);
console.log('Connected');
const db = client.db();
return res({
db,
client
});
});
});
}

async function use_db(db_url, func, ...args) {
console.log('Start');
try {
const {
db,
client
} = await connectDB(db_url);
console.log('After db connection');
const prom = func(db, ...args);
client.close();
console.log('Disconnected successfully');
return prom;
} catch (error) {
console.log(error);
}
}

关于node.js - 如何在node.js中处理mongoDB常规操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55551948/

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