我正在构建一个应用程序,该应用程序在闲置一段时间后关闭其数据库连接。问题是,我无法终止它与 MongoClient.close() 的连接,因为它总是返回错误“TypeError:MongoClient.close 不是函数”。我究竟做错了什么?
const MongoClient = require("mongodb").MongoClient;
let mongo = {};
let db;
let disconnectTimer;
let retryTimer;
let disconnect; //Used to prevent mongo from reconnect.
mongo.disconnect = () => {
disconnect = true;
try {
MongoClient.close();
} catch (error) {
console.warn("Error closing connection to Database =", error);
throw {
statusCode: 404,
error: error.toString(),
reason: "",
details: ""
};
}
}
mongo.getDB = () => {
if (typeof db !== "undefined" && !disconnect)
return db;
else
return connect().catch((error) => { …Run Code Online (Sandbox Code Playgroud) 当我在 node 中创建一个异步函数并使用await 时,我让执行等待承诺解决(可以是解决或拒绝),我所做的是将await承诺放在 try/catch 块中并抛出承诺拒绝时的错误。问题是,当我在 try/catch 块中调用这个异步函数来捕获错误时,我得到一个UnhandledPromiseRejectionWarning。但是使用await的全部意义不是等待承诺解决并返回它的结果?似乎我的异步函数正在返回一个承诺。
示例 - UnhandledPromiseRejectionWarning代码:
let test = async () => {
let promise = new Promise((resolve, reject) => {
if(true) reject("reject!");
else resolve("resolve!");
});
try{
let result = await promise;
}
catch(error) {
console.log("promise error =", error);
throw error;
}
}
let main = () => {
try {
test();
}
catch(error){
console.log("error in main() =", error);
}
}
console.log("Starting test");
main();
Run Code Online (Sandbox Code Playgroud)