ES6课程---10、promise对象
一、总结
一句话总结:
promise对象是用来进行异步操作的,是将异步操作以同步的流程表达出来, 避免了层层嵌套的回调函数,promise对象的本质是状态机,通过设定不同的状态来执行不同的操作
//创建一个promise实例对象 let promise = new Promise((resolve, reject) => { //初始化promise的状态为pending---->初始化状态 console.log('1111');//同步执行 //启动异步任务 setTimeout(function () { console.log('3333'); //resolve('成功了传过去的数据');//修改promise的状态pending---->fullfilled(成功状态) reject('失败了传过去的数据');//修改promise的状态pending----->rejected(失败状态) },2000); }); promise.then((data) => { console.log('成功了:' + data); }, (error) => { console.log('失败了:' + error); }); console.log('2222');
1、promise对象使用操作流程?
a、创建promise对象:执行异步操作且设置promise状态
b、调用promise的then():接收设置的promise状态,接收异步操作执行成功或者失败的数据
a、创建promise对象 let promise = new Promise((resolve, reject) => { //初始化promise状态为 pending //执行异步操作 if(异步操作成功) { resolve(value);//修改promise的状态为fullfilled } else { reject(errMsg);//修改promise的状态为rejected } }) b、调用promise的then() promise.then(function( result => console.log(result), errorMsg => alert(errorMsg) ))
2、promise对象的本质是状态机,那么promise对象有哪些状态?
1、pending: 初始化状态
2、fullfilled: 成功状态
3、rejected: 失败状态
3、promise中如何设置状态?
可以在promise的构造函数的参数对应的回调函数中设置,如果异步操作成功,可以通过resolve方法设置为成功状态(fullfilled),如果异步操作失败,可以通过rejected方法设置为失败状态(rejected)
//创建一个promise实例对象 let promise = new Promise((resolve, reject) => { //初始化promise的状态为pending---->初始化状态 console.log('1111');//同步执行 //启动异步任务 setTimeout(function () { console.log('3333'); //resolve('成功了传过去的数据');//修改promise的状态pending---->fullfilled(成功状态) reject('失败了传过去的数据');//修改promise的状态pending----->rejected(失败状态) },2000); }); promise.then((data) => { console.log('成功了:' + data); }, (error) => { console.log('失败了:' + error); }); console.log('2222');
4、promise中如何 接收 设置的状态(接收异步操作成功或者失败的数据)?
用promise.then()方法可以来接收成功或者失败的状态,promise.then()的参数是两个回调函数,一个是操作成功的回调函数,一个是操作失败的回调函数
//创建一个promise实例对象 let promise = new Promise((resolve, reject) => { //初始化promise的状态为pending---->初始化状态 console.log('1111');//同步执行 //启动异步任务 setTimeout(function () { console.log('3333'); //resolve('成功了传过去的数据');//修改promise的状态pending---->fullfilled(成功状态) reject('失败了传过去的数据');//修改promise的状态pending----->rejected(失败状态) },2000); }); promise.then((data) => { console.log('成功了:' + data); }, (error) => { console.log('失败了:' + error); }); console.log('2222');
5、promise对象异步操作应用?
使用promise可以封装处理异步的比如ajax、文件处理等耗时操作
二、promise对象
博客对应课程的视频位置:10、promise对象
https://www.fanrenyi.com/video/24/211
1、回调函数做异步
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>1、回调函数做异步</title> 6 </head> 7 <body> 8 <!-- 9 10 需求: 11 异步操作1做完了再做异步操作2, 12 异步操作2做完了再做异步操作3 13 14 --> 15 <script> 16 // function async_fun(param){ 17 // setTimeout(()=>{ 18 // return '异步操作:'+param; 19 // },1000); 20 // } 21 // console.log(async_fun(1)); 22 23 //想要接受到参数可以用回调函数 24 // function async_fun(param,callback){ 25 // setTimeout(()=>{ 26 // callback('异步操作:'+param); 27 // //return '异步操作:'+param; 28 // },1000); 29 // } 30 // 31 // async_fun(1,function (a) { 32 // console.log(a); 33 // }); 34 35 36 //异步操作1做完了再做异步操作2 37 //异步操作2做完了再做异步操作3 38 39 // function async_fun(param,callback){ 40 // setTimeout(()=>{ 41 // callback('异步操作:'+param); 42 // },1000); 43 // } 44 45 //异步的流程来做异步的操作 46 // async_fun(1,function (a) { 47 // console.log(a); 48 // async_fun(2,function (a) { 49 // console.log(a); 50 // async_fun(3,function (a) { 51 // console.log(a); 52 // async_fun(4,function (a) { 53 // console.log(a); 54 // }); 55 // }); 56 // }); 57 // }); 58 59 //同步的流程来做异步的操作 60 // async_fun(1,function (a) { 61 // console.log(a); 62 // }); 63 // async_fun(2,function (a) { 64 // console.log(a); 65 // }); 66 // async_fun(3,function (a) { 67 // console.log(a); 68 // }); 69 // async_fun(4,function (a) { 70 // console.log(a); 71 // }); 72 73 </script> 74 </body> 75 </html>
2、promise对象
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>promise对象</title> 6 </head> 7 <body> 8 <!-- 9 promise 10 英 /ˈprɒmɪs/ 美 /ˈprɑːmɪs/ 11 n. 许诺,允诺;希望 12 vt. 允诺,许诺;给人以…的指望或希望 13 vi. 许诺;有指望,有前途 14 15 Promise对象: 代表了未来某个将要发生的事件(通常是一个异步操作) 16 17 promise对象 18 将异步操作以同步的流程表达出来, 避免了层层嵌套的回调函数(俗称'回调地狱') 19 本质是状态机,通过设定不同的状态来执行不同的操作 20 21 promise对象使用操作流程 22 ES6的Promise是一个构造函数, 用来生成promise实例 23 24 a、创建promise对象 25 let promise = new Promise((resolve, reject) => { 26 //初始化promise状态为 pending 27 //执行异步操作 28 if(异步操作成功) { 29 resolve(value);//修改promise的状态为fullfilled 30 } else { 31 reject(errMsg);//修改promise的状态为rejected 32 } 33 }) 34 b、调用promise的then() 35 promise.then(function( 36 result => console.log(result), 37 errorMsg => alert(errorMsg) 38 )) 39 40 41 promise对象的3个状态 42 promise对象的本质是状态机,那么promise对象有哪些状态 43 1、pending: 初始化状态 44 2、fullfilled: 成功状态 45 3、rejected: 失败状态 46 47 promise中如何设置状态 48 可以在promise的构造函数的参数对应的回调函数中设置, 49 如果异步操作成功,可以通过resolve方法设置为成功状态(fullfilled) 50 如果异步操作失败,可以通过rejected方法设置为失败状态(rejected) 51 52 promise中如何接收设置的状态 53 用promise.then()方法可以来接收成功或者失败的状态, 54 promise.then()的参数是两个回调函数, 55 一个是操作成功的回调函数,一个是操作失败的回调函数 56 57 58 promise对象异步操作应用 59 使用promise实现超时处理 60 使用promise封装处理ajax请求 61 62 63 --> 64 <script> 65 //promise对象最核心的: 66 // 用同步的流程来解决异步的操作 67 68 //promise的本质: 69 //promise的本质是状态机,也就是通过设置不同的状态, 70 // 来告诉用户异步操作是执行成功了还是执行失败了 71 72 // function async_fun(param){ 73 // setTimeout(()=>{ 74 // return '异步操作:'+param; 75 // },1000); 76 // } 77 //Promise是一个构造函数 78 //promise有一个参数,这个参数是回调函数 79 //这个回调函数有两个参数:resolve, reject 80 //resolve就是设置异步操作执行成功之后怎么做 81 //reject就是设置异步操作执行失败之后怎么做 82 //并且resolve和reject也是回调函数 83 84 //resolve回调函数就是将promise的状态从pending状态设置为了成功 的状态resolved 85 //resolve回调函数的另外一个作用就是向外面传递异步操作执行成功之后的数据 86 87 //reject回调函数就是将promise的状态从pending状态设置为了失败 的状态rejected 88 //reject回调函数的另外一个作用就是向外面传递异步操作执行失败之后的数据 89 let promise=new Promise(function (resolve, reject) { 90 setTimeout(()=>{ 91 //return '异步操作:'+param; 92 //如果异步操作执行成功 93 //resolve({data:'这是resolve返回的数据'}); 94 //如果异步操作执行失败 95 reject('异步操作执行失败111'); 96 },1000); 97 }); 98 console.log(promise); 99 //promise的then方法可以接受到resolve和reject传递过来的数据 100 //then方法里面有两个参数,这两个参数都是回调函数 101 promise.then((data)=>{ 102 console.log(data); 103 },(error)=>{ 104 console.log(error); 105 }); 106 107 108 //promise的状态 109 //初始状态:pending 110 //异步操作执行成功状态:resolved 111 //异步操作执行失败状态:rejected 112 113 114 115 116 </script> 117 </body> 118 </html>