Javascript 妥善处理拒绝承诺
考虑到以下准则: db.jsJavascript 妥善处理拒绝承诺,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,考虑到以下准则: db.js // Connecting to catalogstore (mongodb) const mydb = async () => { try { await mongoose.connect(process.env.db); console.log("Connected to Database!"); } catch (err) { throw new Error("Database connection error:",
// Connecting to catalogstore (mongodb)
const mydb = async () => {
try {
await mongoose.connect(process.env.db);
console.log("Connected to Database!");
}
catch (err) {
throw new Error("Database connection error:", err);
}
};
export { db }
import { db } from './db';
db().then(async() => {
try {
let server = app.listen(process.env.port,
process.env.host, function() {
let host = server.address().address;
let port = server.address().port;
console.log('App started');
});
} catch (err) {
console.log(err);
}
});
app.js
// Connecting to catalogstore (mongodb)
const mydb = async () => {
try {
await mongoose.connect(process.env.db);
console.log("Connected to Database!");
}
catch (err) {
throw new Error("Database connection error:", err);
}
};
export { db }
import { db } from './db';
db().then(async() => {
try {
let server = app.listen(process.env.port,
process.env.host, function() {
let host = server.address().address;
let port = server.address().port;
console.log('App started');
});
} catch (err) {
console.log(err);
}
});
基本上,我只想在建立db连接后启动Express服务器
它实际上工作得很好,但是我得到了以下警告:
(node:29892) UnhandledPromiseRejectionWarning: Error: Database connection error:
at catalogstore (/Users/notaris/Workspace/Google/gcp-devops/apps/catalogservice/src/db.js:44:11)
at processTicksAndRejections (internal/process/task_queues.js:89:5)
(node:29892) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:29892) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
如何正确处理该错误?错误是由
db
异步函数引发的
处理此错误的正确方法是(使用异步函数/箭头):
修改app.js,如下所示
import { db } from './db';
db()
.then(/* normal logic */)
.catch(/* error logic */)
只需在调试器中捕获它^ ^,我发现您应该像这样捕获承诺中的错误:
//app.js
import { db } from './db';
db().then(async() => {
try {
let server = app.listen(process.env.port,
process.env.host, function() {
let host = server.address().address;
let port = server.address().port;
console.log('App started');
});
} catch (err) {
console.log(err);
}
}).catch(error=>{
console.log('error'+error);
});
您可以查看这一点以了解更多详细信息。您不希望在传统(promise.then().catch()
)和异步/await(尝试{await foo()}catch(e){log(e)}
)样式中混合处理承诺。这会降低代码的可维护性,使其更难理解。这很好,因为您始终使用try/catch来处理错误,而不是混合使用.catch()
和try/catch