如何正确处理Node.js中的异步错误

下面的代码解释了主要异步过程中的两个异步代码。我的问题是“ userController.insertUser”-捕获了一些错误,但是该错误无法引发主要问题

DataMiddleware.DataValidate(Object).then((middlewareSuccess) => {
            switch (true) {
              case ((tableName === "users") && (method === "CREATE")):


               userController.insertUser(Object).then(()=> {
                    ...
                }).catch((err) => {
                        return err
                })

                break;
              case ((tableName === "users") && (method === "BATCH")):

               userController.updateUser(Object).then(()=> {
                    ...
                }).catch((err) => {
                        return err
                })
                break;

            }

            }).catch((err) => {
                    console.log("main error",err)
            })

如何正确捕捉?

亚历克斯·米恰利迪斯

有两种方法可以处理嵌套的承诺错误。

1)将其捕获到嵌套的Promise中并扔给父级

const DataMiddleware = {
  DataValidate: sinon.fake.resolves("value")
};
const userController = {
  insertUser: sinon.fake.rejects("insertUser erroorr"),
  updateUser: sinon.fake.rejects("updateUser erroorr")
};
const tableName = "users",
  method = "CREATE";

DataMiddleware.DataValidate()
  .then(middlewareSuccess => {
    switch (true) {
      case tableName === "users" && method === "CREATE":
        return userController.insertUser()
          .catch(err => {
            console.log("nested catch handler " + err);
            throw err;
          });
    }
  })
  .catch(err => {
    console.log("main error " + err);
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/5.0.1/sinon.js"></script>

2)退还诺言,让父母处理发生的任何错误

const DataMiddleware = {
  DataValidate: sinon.fake.resolves("value")
};
const userController = {
  insertUser: sinon.fake.rejects("insertUser erroorr"),
  updateUser: sinon.fake.rejects("updateUser erroorr")
};
const tableName = "users",
  method = "CREATE";

DataMiddleware.DataValidate()
  .then(middlewareSuccess => {
    switch (true) {
      case tableName === "users" && method === "CREATE":
        return userController.insertUser()
    }
  })
  .catch(err => {
    console.log("main error " + err);
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/5.0.1/sinon.js"></script>

这里的重点是承诺链。您从另一个返回新的诺言,第一个catch处理程序仍然有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章