基于PROMISE解决回调地狱问题

Posted angle-xiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于PROMISE解决回调地狱问题相关的知识,希望对你有一定的参考价值。

  回调地狱问题:

    在使用javascript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱。比如说你要把一个函数 A 作为回调函数,但是该函数又接受一个函数 B 作为参数,甚至 B 还接受 C 作为参数使用,就这样层层嵌套,人称之为回调地狱,代码阅读性非常差。

    例如:要发送三个异步的请求要求前面一个请求完成之后再依次发送请求。

$.ajax
    url:‘url1‘,
    success:result=>
        $.ajax
            url:‘url2‘,
            success:result=>
                $.ajax
                    url:‘url3‘,
                    success:result=>
                        
                    
                ;
            
        ;
    
;//这就是一个栗子

    基于PROMISE解决

    Promise:ES6新增的内置类,是为了管理异步操作的。

//封装成多个方法
let queryA = function()
    return new Promise(resolve=>
        $.ajax(
            url:‘url1‘,
            success:resolve,
        );
    ); 

let queryB = function()
    return new Promise(resolve=>
        $.ajax(
            url:‘url2‘,
            success:resolve,
        );
    ); 

let queryC = function()
    return new Promise(resolve=>
        $.ajax(
            url:‘url3‘,
            success:resolve,
        );
    ); 

//先将queryA返回的实例赋给promise,每次执行then都会返回新的Prmise实例
let promise = queryA();
promise.then(result=>
    console.log(1);
    return queryB();//将queryB的实例返回作为下一个的实例用于调用下一个then
).then(result=>
    console.log(2);
    return queryC();
).then(result=>
    console.log(3);
);

 

以上是关于基于PROMISE解决回调地狱问题的主要内容,如果未能解决你的问题,请参考以下文章

回调地狱以及用promise怎么解决回调地狱

js-promise以及asyncawait

面试题系列---什么是Promise,解决什么问题?Promise.all解决了什么问题?实现原理?回调地狱?

async + promise 解决回调地狱

Node.js Promise对象(解决回调地狱问题)async和await函数

JavaScript 使用Async 和 Promise 完美解决回调地狱