async与await

async和await两种语法结合可以让异步代码像同步代码一样。

 async 函数

async 是一个修饰符,async 定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数。

举例:

 1:当返回值不是promise对象 当调用函数的时候就是已成功的值

 2:当返回的是promise对象 那么函数(promise对象)的结果与返回的promise状态一致

    async function demo(){
		// 1:当返回值不是promise对象 当调用函数的时候就是已成功的值
		// return "succ";
		// 2:当返回的是promise对象 那么函数(promise对象)的结果与返回的promise状态一致
			return  new Promise((resolve,reject)=>{
				let flag = false;
				if(flag){
					resolve("succ");
				}else{
					reject("error");
				}
				})
			}
			const MyPromise = demo();
			MyPromise.then((resolve)=>{
				console.log(resolve);
			},(reject)=>{
				console.log(reject);
			})
			

 

 await表达式

是一个修饰符,await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Promise中返回的内容, 获取的是Promise函数中resolve或者reject的值。

1:await必须放在async函数中

2:await右侧的表达式一般为promise对象

3:await可以返回的是右侧promise成功的值

4:await右侧的promise如果失败了,就会抛出异常,需要通过try…catch捕获处理

举例:

1:await需要写在async函数的内部  

2:await 修饰的Promise 返回的值就是resolve的值

3:后面的代码需要等待 await后的结果

   async function demo(){
				const a = await "a";
				const b = await new Promise((resolve,reject)=>{
					setTimeout(()=>{
						console.log("定时器执行了....");
						resolve("b");
					},3000);
				});
				const c =  await "c";
				console.log(a,b,c);
			}
			demo();

2:失败的代码 await 错误的代码 需要用try catch捕获

  sync  function demo(){
				try{
					 const a = await new Promise((relsolve,reject)=>{
					    reject("数据不存在");	
					})
				}catch(error){
						console.log(error);
				}
			}
			demo();

3:async await ajax使用

   function sendajax(url){
				return new Promise((resolve,reject)=>{
					  const http =  new XMLHttpRequest();//创建对象
					  http.open("GET",url);//用get方法请求地址
					  http.send();//发送请求
					  http.onreadystatechange = function(){
						  if(http.readyState==4){
							  if(http.status==200){
								  resolve(JSON.parse(http.response));
							  }
						  }
					  }  				  
				})
			}
			async function demo(){
	const res = await  sendajax("http://127.0.0.1:8848/web2209/ES6/test.json");
				if(res.code==200){
					console.log("有数据");
				}else{
					console.log("无数据");
				}
			}
	        demo();

 

 readyState 状态说明:

 0:代理创建,未调用open()方法;

 1:open方法已调用

 2:send()方法一调用

 3:LOADING 数据下载中 responseText已经有值

 4:下载操作完成

 status:返回网页状态,200~299都是正常状态,404 not found。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值