javascript - 正确处理 promise 拒绝

标签 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:", err);
  }
};

export { db }

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);
  }
});

基本上我只想在建立数据库连接后启动 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 异步函数引发的。

处理此错误的正确方法(使用异步函数/箭头)是:

import { db } from './db';
const main = async () => {
  try {
    await db();
    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);
  }
});
main();

关于javascript - 正确处理 promise 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56062890/

相关文章:

mysql - (NodeJS、MySQL、AngularJS、Express 4.0)不阻止用户的 api/路由有风险吗?

windows - 如何解析 node.js 或 io.js 中区分大小写的路径?

javascript - 等待jquery异步加载后再加载js

javascript - JS Parsley 仅验证表单中的某些字段

javascript - 如何将 sidenav 固定到现有的 Sticky Header onscroll?

node.js - 有什么办法可以通过编辑package.json来摆脱npm可选依赖项警告?

c# - Realm 数据库异步查询和.Net

objective-c - 如何在 objective-c 中编写非阻塞方法

javascript - 通过此数组 js 将项目添加到循环数组中

javascript - jquery 动画一个 div 到中心