ES6 - Promise下的方法 ( catch / all / race / async函数 )

Promise下的方法

模拟请求接口

网络请求状态码

  • 100-199 用于指定客户端应相应的某些动作
  • 200-299 用于表示请求成功
  • 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息
  • 400-499 用于指出客户端的错误
  • 500-599 用于支持服务器错误

	new Promise((resolve,reject)=>{
		// 模拟请求接口,拿到数据
        setTimeout(()=>{
        	let data ={
	            state : "200",
                isState : "ok",
                data : {
	                code : 1 
				}
			}
            resolve(data);
		},1000)
	}).then((data)=>{
		return data.data
	}).then((data)=>{
		console.log(data)
	});

Promise.catch

捕获前一个promise抛出的错误


    new Promise((resolve,reject)=>{
            // resolve();
            reject(12)
        }).then(()=>{
            console.log(1)
        }).then(()=>{
            console.log(2)
        }).then(()=>{
            console.log(3)
        }).catch((err)=>{
            console.log("请求错误"+ err)
        })
        
Promise.all

将多个Promise实例,包装成一个新的Promise实例
当所有Promise都成功的时候,整个 Promise.all 才成功
必须以数组的形式传入多个Promise对象


	let p1 = new Promise((resolve)=>{
		setTimeout(()=>{
	        console.log(1)
            resolve()
		},1000)
	})
	let p2 = new Promise((resolve)=>{
		setTimeout(()=>{
			console.log(2)
            resolve()
		},2000)
	})
	
	Promise.all([p1,p2]).then(()=>{
		console.log(4)
	})
	
Promise.race

与 Promise.all 方法类似将多个Promise包装成一个新的Promise实例
但是 只要 其中有一项的状态发生改变,新的实例的状态就会随着改变

	
	// 使用量较小
	Promise.race([p1,p2]).then(()=>{
		console.log(5)
	})

async函数

异步执行的特点:效率高 ,但代码可读性差
async 是目前为止 异步写法终极版
只要函数名之前加上async关键字,就表明该函数内部有异步操作。
该异步操作应该返回一个Promise对象,前面用await关键字注明。
当函数执行的时候,一旦遇到await就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句


    async function fn() {
		let n1 = await new Promise((resolve) => {
	        setTimeout(() => {
	            console.log(1);
                resolve();
			}, 1000)
		});
		let n2 = await new Promise((resolve) => {
	        setTimeout(() => {
	            console.log(2);
                resolve();
			}, 1000)
		});

		let n3 = await new Promise((resolve) => {
	        setTimeout(() => {
	            console.log(3);
                resolve();
			}, 1000)
		});
	}
    fn()

  • 处理错误数据

    async function fn() {
		try {
	        let n1 = await new Promise((resolve,reject) => {
	            setTimeout(() => {
	                console.log(1);
                    reject(12);
				}, 1000)
			}).then(()=>{
				console.log(2)
			})
			// 只要 其中有一项的状态发生改变,新的实例的状态就会随着改变
		} catch (err) {// err 会接收 reject() 返回的数据
			console.log(err)
		}
	}
    fn()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值