如何在Node,js中处理异常控制?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Node,js中处理异常控制?相关的知识,希望对你有一定的参考价值。

使用以下代码:

async function demo(){
   const ret1, ret2, ret3;
   try {
     ret1 = await task1();
   } catch (e) {
      // ...
   }

   if(!ret1.success) {
     return ret1.message;
   }

   try {
      ret2 = await task2();
   } catch (e) {
      // ...
   }

   if(!ret2.success) {
      // retry or rollback task1;
      return;
   }

   try {
      ret3 = await task3();
   } catch (e) {
      // ...
   } 

   if(!ret3.success) {
      // retry or rollback task1
      return;
   }

   return ret3;

}

task2依赖于task1,task3依赖于task2。此外,task1将在db中插入数据,因此如果task2或task3失败,它应该重试或回滚task1。任何更好的管理任务的解决方案?事实上,将有超过3个任务。

答案

完美的方式有点主观,但我认为这个更好。肯定有这样做的方法,例如,如果你使用promise然后格式,因此下面应该工作

const demo = () => {
  return task1()
    .then(() => task2())
    .then(() => task3())
    .then(() => task4())
    .then(() => task5())
    .then(() => {
      throw new Error("Testing Error");//Line 8
    })
}

demo()
  .catch(err => {
    console.log(err);
    // output
    // Error: Testing Error at task1.then.then.then.then.then index.js:8:13)
  });

当使用async时,下面的格式应该可行

const demo = async () => {
  await task1()
  await task2()
  await task3()
  await task4()
  await task5()
  throw new Error("Testing Error");//Line 7
}

demo()
  .catch(err => {
    console.log(err);
    // output
    // Error: Testing Error at demo (index.js:7:9)
  });

以上是关于如何在Node,js中处理异常控制?的主要内容,如果未能解决你的问题,请参考以下文章

在 node.js/angular 应用程序中查询来自不同主机的数据时,如何遵守访问控制起源异常? [复制]

使用 node.js 处理 Javascript 异步异常

如何在 Node.js expressjs 的异步对象方法中处理未处理的承诺拒绝?

Node.js异常处理

Node.js JavaScript 片段中的跳过代码

Node.js 最佳实践异常处理——在 Async/Await 之后