如何处理节点中的异常控制,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取决于任务1,task3取决于任务2。此外,任务1将插入数据库中的数据,因此,如果任务2或任务3失败,则应重试或回滚任务1。有什么更好的解决方案来管理任务吗?实际上,将有3个以上的任务。

完美的方法有点主观,但我认为这更好。肯定有这样做的方法

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

使用异步时等待下面的格式应起作用

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

最新更新