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

时间:2017-12-16 15:17:43

标签: node.js exception-handling flow-control

使用以下代码:

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个任务。

1 个答案:

答案 0 :(得分:0)

完美的方式有点主观,但我认为这个更好。 肯定有这样做的方法,例如,如果你使用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)
  });