如何在promise中简化这个有角度的重复代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在promise中简化这个有角度的重复代码?相关的知识,希望对你有一定的参考价值。

我是一名新的Angular开发人员。我想知道是否有一种优雅的方法来简化下面的重复代码。

addTransaccion() {
    try {
      if (this.idTransaccion === '0') {
        this.transaccionesSrv.addTransaccion(data)
          .then(res => {
            if (res) {
              this.router.navigate(['/cuentas/transacciones'], { queryParamsHandling: "preserve" });
            }
          });
      } else {
        this.transaccionesSrv.actualizarTransaccion(data, this.idTransaccion)
          .then(res => {
            if (res) {
              this.router.navigate(['/cuentas/transacciones'], { queryParamsHandling: "preserve" });
            }
          });
      }
    } catch (error) {
      this.envioFormularioOk = false;
    }
  }
答案

也许这样的事情

 (this.idTransaccion === '0' ? this.transaccionesSrv.addTransaccion(data) : 
this.transaccionesSrv.actualizarTransaccion(data, this.idTransaccion))
          .then(res => {
            if (res) {
              this.router.navigate(['/cuentas/transacciones'], { queryParamsHandling: "preserve" });
            }
          });

但我认为阅读起来比较困难

另一答案
const manageTransaction = (data)=>{
 if (this.idTransaccion === '0')
    return transaccionesSrv.addTransaccion(data);
  else
    return this.transaccionesSrv.actualizarTransaccion(data,
                                                       this.idTransaccion);
};
const navigate = (res) => {
 if (res) {
    this.router.navigate(['/cuentas/transacciones'], { 
       queryParamsHandling: "preserve" });
   }
};


const addTransaccion = () => {
  manageTransaccion(data)
  .then(res => navigate(res););
  .catch((error)=> {
    this.envioFormularioOk = false;
  });} 

以上是关于如何在promise中简化这个有角度的重复代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ES6 中将回调代码转换为 Promise [重复]

如何将promise的返回值推送到数组中? [重复]

在expressJS中如何创建一个缓存,使多个请求等待相同的promise [重复]

我的代码中有许多重复的功能如何简化它们

如何在构造函数中调用promise对象来设置属性[重复]

Async/Await是这样简化JavaScript代码的