promise 结合ajax promise.all promise.race

https://blog.csdn.net/u012045958/article/details/80635151

https://www.jianshu.com/p/7e60fc1be1b2

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<style>

#outer{

width: 200px;

height: 200px;

border: 1px solid #000;

background-color: #333;

}

#inner{

width: 100px;

height: 100px;

background-color: pink;

}

</style>

</head>

<body>

<div id="outer">

<div id="inner" class="xihuan">11111</div>

</div>

</body>

</html>

<script>

var p = new Promise(function(resolve, reject){

console.log("create a promise--1"); // 这是传参数,是立即执行的;

resolve("success--2");

});

console.log("after new Promise--3");

p.then(function(value){

console.log(value);

});

// 答案输出, 1,3,2 ;

// promise ajax 异步请求

/*

定义一个使用promise的ajax请求,这里依赖jquery

参数中请求url为必填参数

*/

// const ajaxPromise= param => {

// return new Promise((resovle, reject) => {

// $.ajax({

// "type":param.type || "get",

// "async":param.async || true,

// "url":param.url,

// "data":param.data || "",

// "success": res => {

// resovle(res);

// },

// "error": err => {

// reject(err);

// }

// })

// })

// }

// let step1 = () => {

// ajaxPromise({

// "url":"",

// }).then(res => {

// console.log("第一个请求正确返回==>"+res);

// step2(res);

// }).catch(err => {

// console.log("第一个请求失败");

// })

// }

/*

第二个请求

*/

// let step2 = (res) => {

// ajaxPromise({

// "type":"get",

// "url":"",

// "data":{"name":res}

// }).then(res => {

// console.log("第二个请求正确返回==>"+res);

// }).catch(err => {

// console.log("第二个请求失败==>"+err);

// })

// }

// step1()

// 模拟使用setTimeout模拟异步请求;先获取账号,再获取详情




 

// 完成的例子 如下;

function start() {

return new Promise((resolve, reject) => {

resolve('1111');

});

};

start()

.then(data => {

console.log('第一次', data);

return Promise.resolve(1); // p1

}).then(data => {

// promise p1

console.log('result of p1: ', data);

return Promise.reject(2); // p2

}).then(data => {

// promise p2

console.log('result of p2: ', data);

return Promise.resolve(3); // p3

})

.catch(ex => {

// promise p3

console.log('ex: ', ex);

return Promise.resolve(4); // p4

})

.then(data => {

// promise p4

console.log('result of p4: ', data);

});

// 完整的例子 3

 // ⑴. resolved(全部置为完成状态)

     //  ①.初始化:比如说以国家,省份,县市(china ,jiangshu ,xian)三个方法来演示下链式调用关系(采用setTimeout模拟异步操作)

           function  china(){

                    console.log('china中国')

                    var p =new Promise(

                    function( resolve,reject ) {

                             setTimeout(function(){

                             console.log('中国  国家')

                             resolve('教育大省份')

                         },1000)

                    }

               )

               return  p;

           }

           function  jiangshu(data){

                    console.log('江苏'+data);

                    var p=new Promise(function(resolve,reject){

                         setTimeout(function (){

                         console.log('江苏 省份')

                         resolve('地级市');

                    },2000)

               })

               return p;

           }

           function  xian(data){

                   console.log('盱眙县'+data)

                    var p=new Promise(function(resolve,reject){

                         setTimeout(function(){

                         console.log('盱眙县');

                         resolve ('淮河镇')

                    },2000)

               })

               return p;

            }

// 函数写完之后,就开始结合then来链式调用了

china()

.then(function(data){returnjiangshu(data)})

.then(function(data){returnxian(data)})

.then(function(data){console.log(data)})



 

//简化写法:

china ().then(jiangshu).then(xian).then(function(data){

    console.log(data)

})



 

//2. rejected(部分置为无效状态)

    //①.初始化:同样的以上述的函数为例

                 function  china(){

                    console.log('china中国')

                    var p =new Promise(

                    function( resolve,reject ) {

                             setTimeout(function(){

                             console.log('中国  国家')

                             reject('教育大省份')

                         },1000)

                    }

               )

               return  p;

                 }

              

                 function jiangshu(data){

                       console.log('江苏是'+data);

                       varp=new Promise(function(resolve,reject){

                            setTimeout(function(){

                            console.log('江苏 省份')

                            resolve('地级市');

                       },2000)

                   })

                   returnp;

              }

   // ②. 函数写完之后,就开始结合then来链式调用了

          china()

         .then(jiangshu,function(data){ console.log(data)})

        

         //等同于(null不执行)

         china()

         .then(null,function(data){ console.log(data)})

        // 等同于(直接执行catch回调,抛出异常,页面也不会卡死,直接走catch)

         china()

         .then(jiangshu).catch(function(data){console.log(data)})

    //(备注:为reject的时候,执行then的第二个参数回调,不会执行jiangshu)

   // ③. 查看控制台输出:





 

</script>

发布了124 篇原创文章 · 获赞 10 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40774743/article/details/86510384