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

原文地址:https://www.cnblogs.com/angle-xiu/p/11377659.html

时间: 2024-08-25 18:54:36

基于PROMISE解决回调地狱问题的相关文章

async + promise 解决回调地狱

// 解决异步回调地狱的方案: async + promise async function writeFile() { // 打开文件 const fd = await new Promise((resolve, reject) => { // 执行 打开文件 异步操作 fs.open('c.txt', 'w', (err) => { if (!err) { // 将promise对象的状态改成 成功状态 resolve(); } else { // 将promise对象的状态改成 失败状态

解决回调地狱问题

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

好程序员web前端教程分享怎么用promise解决回调和异步

好程序员web前端教程分享怎么用promise解决回调和异步首先让我们看看下面这题输出什么? setTimeout(function() { console.log(1); },1000) console.log(2); 我们得到的结果是:先输出2,后输出1;这是什么原因呢?大家应该都知道定时器是异步的;所以先先输出2;那么我们的需求来了,怎么先输出1,然后输出2呢? function foo(callback) { setTimeout(function() { console.log(1);

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

哈哈哈,我又又又回来了,不好意思,最近枸杞喝的比较到位,精力比较旺盛. 现在我们来聊一聊啥是回调地狱,注意是回调地狱啊   不是RB人民最爱拍的那啥地狱啊,来吧,上车吧少年,这是去幼儿园的车 都让开,我要上高清无码大图了啊,青少年注意避让 原文地址:https://www.cnblogs.com/suihang/p/9595548.html

七校项目中使用promise处理回调地狱问题

//封装一个promise var ajaxPromise = function(param){ return new Promise(function(suc,fail){ debugger; console.log(param) //ajax请求 $.ajax({ url:param.url, type:"post", async:false, data:param.data, dataType:"json", success: function(res) {

解决"回调地狱"的发展过程

Way 1 :利用promise Way 2 :利用generator Way 3 :ES7新增关键字 async await async将当前函数定义为异步函数,该函数返回一个promise对象 await用于一个异步操作之前,等待该异步操作结束,并得到异步执行的结果 await关键字返回promise对象中resolve方法传过来的值 原文地址:https://www.cnblogs.com/stuartrealm/p/10853134.html

js中promise解决callback回调地狱以及使用async+await异步处理的方法

1.callback回调地狱 function ajax(fn) { setTimeout(()=> { console.log('你好') fn() }, 1000) } ajax(() => { console.log('执行结束') ajax(()=>{ console.log('执行结束') ajax(()=>{ console.log('执行结束') ajax(()=>{ console.log('执行结束') }) }) }) }) 2.promise解决回调地狱

Promise解决node.js回调问题

Promise就是为了解决回调的! 在npm包中有个叫Q的家伙就是专门封装promise解决回调问题的. 有关promise介绍以及Q的介绍点这里. 下面介绍如何利用Q把只提供回调函数方式的api封装成promise模式:(以官方fs为例) Q中有两种方式封装函数成promise对象,分别是Q defer 和 Q promise: /**  * try to use q to handle async  * @cjp   2014-07-15  */ var Q = require('q');

JavaScript异步编程__“回调地狱”的一些解决方案

异步编程在JavaScript中非常重要.过多的异步编程也带了回调嵌套的问题,本文会提供一些解决"回调地狱"的方法. setTimeout(function () { console.log('延时触发'); }, 2000); fs.readFile('./sample.txt', 'utf-8', function (err, res) { console.log(res); }); 上面就是典型的回调函数,不论是在浏览器中,还是在node中,JavaScript本身是单线程,因此