ES6 — Promise对象

1、概述

是异步编程的一种解决方案。

从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。

2、Promise状态

三种状态::pending(进行中)、fulfilled(已成功)和 rejected(已失败)。只有异步操作才能改变这个状态。

Promise 对象:只有从 pending 变为 fulfilled 和从 pending 变为 rejected 的状态改变。只要处于 fulfilled 和 rejected ,状态就不会再变了即 resolve(已定型)。

3、then方法:

then 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。

function promiseClick(){
		let p = new Promise(function(resolve, reject){
			setTimeout(function(){
				var num = Math.ceil(Math.random()*20); //生成1-10的随机数
				console.log('随机数生成的值:',num)
				if(num<=10){
					resolve(num);
				}
				else{
					reject('数字太于10了即将执行失败回调');
				}
			}, 2000);
		   })
		   return p
	   }
 
	promiseClick().then(
//下面是then函数的两个参数,一个是成功的回调函数,一个是失败的回调函数。(注意先后顺序) function(data){ console.log('resolved成功回调'); console.log('成功回调接受的值:',data); }, function(reason){ console.log('rejected失败回调'); console.log('失败执行回调抛出失败原因:',reason); } );

  

4、catch的用法

与Promise对象方法then方法并行的一个方法就是catch,与try  catch类似,catch就是用来捕获异常的,也就是和then方法中接受的第二参数rejected的回调是一样的。

function promiseClick(){
		let p = new Promise(function(resolve, reject){
			setTimeout(function(){
				var num = Math.ceil(Math.random()*20); //生成1-10的随机数
				console.log('随机数生成的值:',num)
				if(num<=10){
					resolve(num);
				}
				else{
					reject('数字太于10了即将执行失败回调');
				}
			}, 2000);
		   })
		   return p
	   }
 
	promiseClick().then(
		function(data){
			console.log('resolved成功回调');
			console.log('成功回调接受的值:',data);
		}
	)
	.catch(function(reason, data){
		console.log('catch到rejected失败回调');
		console.log('catch失败执行回调抛出失败原因:',reason);
	});	

  

 

posted @ 2021-09-27 22:26  小绵杨Lamb  阅读(31)  评论(0)    收藏  举报