【问题标题】:how can avoid this little callback hell如何避免这个小回调地狱
【发布时间】:2018-04-11 15:03:30
【问题描述】:

如何避免这个小回调地狱?这段代码运行良好

        estaElServicioDespachado(15).then(function(){
            sePermiteModificarElCupon(25).then(function(respuesta){
                $state.go("barra.general.formularioCupon");
            },function(error){                   
                alert(error);
            })
        },
        function(error){               
            alert(error);
        });

我试图做这样的事情来避免回调地狱,但是当 'sepermitemodificarElcupon' 拒绝时,不会调用 catch 函数

    estaElServicioDespachado(15)
        .then(sePermiteModificarElCupon(25)}
        .then(function(){$state.go("barra.general.formularioCupon");})
        )
        .catch(function(error){               
            alert(error);
        })

也许这会有所帮助。这是调用返回承诺的服务函数的函数

    function estaElServicioDespachado (id_servicio){
        return catalogoServicios.estaElServicioDespachado(id_servicio)
    }


    function sePermiteModificarElCupon(id_cupon){
        return catalogoCupones.sePermiteModificarElCupon(id_cupon);
    }

【问题讨论】:

  • 你想添加catch而不是回调?
  • 没有。我想使用第二种形式,但它不起作用。
  • 你忘记了 Promise 的基本规则。 return!!!!否则它将永远无法工作。
  • 但我必须在哪里添加退货?
  • 来自每个函数,除非它两者是同步的并且不返回值。

标签: angularjs callback angular-promise


【解决方案1】:

您要查找的单词是:Promise.all()

像这样链接你的承诺:

var promise1 = estaElServicioDespachado(15)
var promise2 = sePermiteModificarElCupon(25)

Promise.all([promise1, promise2])
.then(function(){$state.go("barra.general.formularioCupon");})
.catch(reason => {          
    console.log(reason)
})

来自 MDN 的示例(添加了一个被拒绝的承诺来捕获):

let promise1 = Promise.resolve(3);
let promise2 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 1000, 'foo');
});
let promise3 = 42;

let promise4 = Promise.reject('something went wrong in 4th promise');

// all goes well
Promise.all([promise1, promise2, promise3])
.then(function(values) {
  console.log(JSON.stringify(values));
})
.catch((err) => { console.log(err) });

// an error thrown in the middle
Promise.all([promise1, promise2, promise4, promise3])
.then(function(values) {
  console.log(JSON.stringify(values));
})
.catch((err) => { console.log(err) });

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多