Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 妥善处理拒绝承诺_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 妥善处理拒绝承诺

Javascript 妥善处理拒绝承诺,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:",

考虑到以下准则:

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