promisify js方法时如何避免逻辑重复?

How to avoid logic duplication when promisifying js methods?

最近我接受了承诺链模式。这样做很方便:

action1
.then(()=> action2())
.then(()=> action3());

但是,为了做到这一点,我像这样更改了所有方法 (TypeScript):

action1() : Promise<any>{
  try{
     // actual code
     return Promise.resolve();
  } catch (err){
     console.error(err);
     return Promise.reject(err);
  }
}

这看起来像是非常重复的模式。避免代码重复的最佳方法是什么?

编写一个函数将 promise 包装在一个函数上,您可以重用它

wrapPromise(fun) : Promise<any>{
  try{
     var value = fun()
     return Promise.resolve(value);
  } catch (err){
     console.error(err);
     return Promise.reject(err);
  }
}


wrapPromise(action1).then()

由于您使用的是打字稿,因此您需要使用 async/await。简单做

async action1(): Promise<any>{
  try {
     return // actual code;
  } catch (err){
     console.error(err);
     throw err;
  }
}

然而,您很有可能实际上不想捕获、记录并重新抛出每个函数中的所有错误,因此这简化为

async action1(): Promise<any>{
  return // actual code;
}