zoukankan      html  css  js  c++  java
  • ES6——Promise

    • 异步和同步

      • 异步,操作之间没有关系,同时执行多个操作, 代码复杂

      • 同步,同时只能做一件事,代码简单

    • Promise 对象

      • 用同步的方式来书写异步代码

      • Promise 让异步操作写起来,像在写同步操作的流程,不必一层层地嵌套回调函数

      • 改善了可读性,对于多层嵌套的回调函数很方便

      • 充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口

    • Promise 也是一个构造函数

      • 接受一个回调函数f1作为参数,f1里面是异步操作的代码

      • 返回的p1就是一个 Promise 实例

      • 所有异步任务都返回一个 Promise 实例

      • Promise 实例有一个then方法,用来指定下一步的回调函数

        let p1 = new Promise(function(resolve, reject){
            // 异步代码           resolve 成功了 reject  失败了
            // $.ajax()    执行异步 AJAX 请求
                $.ajax({
                    url: '10-arr.txt', //规定发送请求的 URL。默认是当前页面。
                    dataType:'json',//预期的服务器响应的数据类型。
                    success(arr){
                        resolve(arr);
                    },
                    error(err){
                        reject(err);
                    }
                })
            });
        
            p1.then(function(arr){
                console.log('成功了'+arr);
            },function(err){
                console.log('失败了'+err);
            });
        let p1 = new Promise(function(resolve, reject){
                $.ajax({
                    url: '10-arr.txt',
                    dataType:'json',
                    success(arr){
                        resolve(arr);
                    },
                    error(err){
                        reject(err);
                    }
                })
            });
            let p2 = new Promise(function(resolve, reject){
                $.ajax({
                    url: '10-arr1.txt',
                    dataType:'json',
                    success(arr){
                        resolve(arr);
                    },
                    error(err){
                        reject(err);
                    }
                })
            });
            Promise.all([
                p1,p2
            ]).then(function(arr){
                let [res1, res2] = arr;
                alert('全成功了');
                alert(res1);
                alert(res2);
            },function(){
                alert('至少有一个失败了');
            });
            // 失败!!!!!!!!!!!!!
        
        function createPromise(url){
                return new Promise(function(resolve, reject){
                    $.ajax({
                        url,
                        dataType:'json',
                        success(arr){
                            resolve(arr);
                        },
                        error(err){
                            reject(err);
                        }
                    })
                });    
            }
            Promise.all([
                createPromise('10-arr.txt'),
                createPromise('10-arr1.txt')
            ]).then(function(arr){
                let [res1, res2] = arr;
                alert('全成功了');
                alert(res1);
                alert(res2);
            },function(){
                alert('至少有一个失败了');
            });
            // 失败!!!!!!!!!!!!!
         Promise.all([
                $.ajax({url:'10-arr.txt',dataType:'json'}),
                $.ajax({url:'10-arr1.txt',dataType:'json'})
            ]).then(function(results){
                let [arr,json] = results;
                alert('成功了');
                console.log(arr.json);
            },function(){
                alert('失败了');
            });
        

          

  • 相关阅读:
    豆瓣评论9.5的《Effective Python》,帮你解决80%难题!
    编程科普|你知道的关于 Python 的那些知识,可能全错了!
    为什么建议使用 Linux?从“白嫖”到精通,只需要这几步!
    交易如钓鱼
    知识图谱学习一:啥是知识图谱,用来干啥,怎么做?
    openpyxl 学习笔记
    使用A卡(AMD Radeon RX470)进行机器学习的失败经历
    activemq 控制台报错 java.lang.SecurityException: User name [system] or password is invalid.
    activemq 安装配置二
    activemq 安装配置一
  • 原文地址:https://www.cnblogs.com/sylys/p/11649048.html
Copyright © 2011-2022 走看看