几种异步函数的请求方式 | generater、async、promise

11 篇文章 1 订阅

generater函数

一、特点

  1. 1.generator不是函数(yield只能写在generater中)

  2. g()不会立即执行,而是一上来就暂停,并返回一个Iterator对象(返回值为iterator,g1是iterator)

  3. 每次g1.next()都会打破暂停状态去执行,直到遇到下一个yield或者return

  4. 遇到yield时,会执行yeild后面的表达式,并返回执行之后的值,然后再次进入暂停状态,此时done: false。

  5. 遇到return时,会返回值,执行结束,即done: true

二、实例

gettoken(){

		}
getusers(){

		}
function *g(){
		    //1.请求token
		    gettoken();
		    yield 1;
		    //2.请求user
		    getusers();
		    yield 2;
		   //请求delete
		    return 3
		}

	
var g1=g();
g1.next();//多次调用next,向下执行一个状态
g1.next();

async函数

一、特定

  1. await只能放在async函数中。
  2. await后面可以是任何对象
  3. async函数返回的是一个Promise对象
  4. 如果await后面的Promise状态变为reject,那么会停止整个async函数

二、实例

async function fn(){

		//请求token
		let token = await gettoken()
			// 拿到token
		let id = await getusers(token);
			 // 根据token去拿用户信息.
		let other = await delete(id)
			// 根据info去拿其他信息
	}
fn()// 最后我们再调用这个函数

promise函数

一、特点

  1. es中没有多线程,但是可以有异步操作;
  2. promise就是异步编程的解决方案
  3. promise本身是一个构造函数:

二、创建

var p1=new Promise((resolve,reject)=>{
			resolve:函数,当请求成功之后执行
			reject:函数,当请求失败时执行
			resolve(data);
			//执行异步操作
		});

三、api
1.非静态方法

then:
			实例对象调用
			p1.then(success,error);
catch:
			捕获异常,不让代码报错抱死
			then中的任何一个回调报错都会执行该方法
			p.then(function(data){
				console.log("success-then:",data);
				console.log(nonum);
			},function(data){
				console.log("error-then:",data);
			}).catch(function(reason){
				console.log("catch-error--",reason);
			});
finally:
			无论成功失败都执行该回调

2.静态方法

  • all:
    all统一执行完三个函数并将成功的值存在一个数组里面返回给then进行回调输出,如有有一个执行为reject-》all的then执行失败回调
  • race:
    all是等所有的异步操作都执行resolve再执行then方法,那么race方法就是相反的,谁先执行完成就先执行回调。先执行完的不管是进行了race的成功回调还是失败回调,其余的将不会再进入race的任何回调

四、实例

	var promise=new Promise((resolve,reject)=>{
				console.log("异步请求开始啦-----");
				//发送一步请求
				var request=new XMLHttpRequest();
				request.open("get","http://47.106.244.1:8099/manager/category/findAllCategory");
				request.setRequestHeader("Accept",'application/json');
				request.send();
				request.onreadystatechange=function(){
					if(request.readyState == 4){
						if(request.status===200){
							//console.log(request.response,'-----');
							resolve(request.response);
						}else{
							reject(request.status);
						}
					}
				}
				
			});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值