ES6的Promise语法初使用

Promise是一种异步编程的解决方案;(个人理解:譬如说一个需求需要两个请求将结果返回后才能处理,这时用Promise就很方便)

我们可以用setTimeout来模拟网络请求

setTimeout(()=>{
	console.log("使用setTimeout来模拟网络请求");
},1000)

意义:1秒钟后回调箭头函数,并执行箭头函数的内容;

Promise详解简介:
    Promise相当于一个类,调用时需要先初始化成对象;该对象的参数是一个函数,通常是箭头函数,而该函数中的参数也是函数,通常是resolve和reject函数;resolve函数是请求成功时调用的函数,reject是请求失败时处理的函数;resolve调用的函数需要用then回调函数进行处理,reject调用的函数需要用catch函数进行回调处理;
简单实例

new Promise((resolve,reject)=>{
		setTimeout((data)=>{
			//console.log("success"); 调用成功,但是不在这个地方进行处理
			resolve('promise');
			reject('error message');
		},10000)
	}).then((data)=>{
		console.log(data); //调用成功,通过resolve函数在这个地方进行处理
	}).catch((err)=>{
		console.log(err);	//调用失败,通过reject函数在这个地方进行处理
	})

Promise是链式编程,简单实例

new Promise((resolve,reject)=>{
		setTimeout(()=>{
			resolve
		},1000)
	}).then(()=>{
		console.log('处理第一层返回的结果');
		return new Promise((resolve,reject)=>{
			setTimeout(()=>{
				resolve
			},1000)
		})
	}).then(()=>{
		console.log(‘处理第二层返回的结果’)
		return new Promise()......
	})

注意:此时一定要注意,处理的回调函数是处于同一层级;
什么情况下会用到Promise?一般情况下是有异步操作时,使用Promise对这个异步操作进行封装;
//new ->构造函数(1.保存了一些状态信息 2.执行传入的参数)
//在执行传入的回调函数时,会传入两个参数,resolve,reject。其本身又是函数
Promise的三种状态:
    异步操作之后会有三种状态:
        pending:等待状态,比如止住网络请求,或者定时器没有到时间;
        fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()
        reject:拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()
使用Promise的简单方法实例:

new Promise((resolve,reject)=>{
		setTimeout(()=>{
			resolve('aaa')
		},1000)
	}).then((res)=>{
		//自己处理的代码
		console.log(res,'第一层的处理代码')
		//对结果进行处理的代码
		return Promise.resolve(res+'111')
		//或者是
		return res+'111';
		//return Promise.reject('error message')
		//throw 'error message'
	}).then((res)=>{
		console.log(res,'第二层的处理代码')
		//对结果进行处理的代码
		return Promise.resolve(res+'222')
		//或者是
		return res+'222';
	}).catch((err)=>{
		console.log(err);
	})
异步请求的封装
	在没有使用promise时:
		let isResult1 = false;
		let isResult2 = false;
		$ajax({
			url:'url1',
			success:function(){
				console.log('结果1')
				isResult1 = true
				handleResult()
			}
		})
		$ajax({
			url:'url2',
			success:function(){
				console.log('结果2')
				isResult2 = true
				handleResult()
			}
		})
		function handleResult(){
			if(isResult1 && isResult2){
				//开始处理请求
			}
		}
	当我们使用了Promise后
	Promise.all([
		new Promise((resolve,reject)=>{
				$ajax({
				url:'url1',
				success:function(){
					console.log('结果1')
					isResult1 = true
					handleResult()
				}
			})
		})
		new Promise((resolve,reject)=>{
				$ajax({
				url:'url2',
				success:function(){
					console.log('结果2')
					isResult2 = true
					handleResult()
				}
			})
		})
	]).then((results)=>{
		result[0]  //就是ajax1请求处理的结果
		result[1]  //就是ajax2请求处理的结果
	})
简单实例:
	Promise.all([
		new Promise((resolve,reject)=>{
			setTimeout(()=>{
				resolve({name:'why',age:18})
			},2000)
		})
		new Promise((resolve,reject)=>{
			setTimeout(()=>{
				resolve({name:'kobe',age:41});
			},1000)
		})
	]).then(results=>{
		console.log(results)
	})

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值