ES6语法 学习笔记(九)generator&async

generator

  • generator(生成器),整个Generator函数就是一个异步任务的容器,在需要暂停的位置使用yield语句
  • 基本语法以及使用
function * show() {
    yield '1';
    yield '2';
    return '3';
}
let a = show();
//a.next() //{value: "1", done: false}
//a.next() //{value: "2", done: false}
//a.next() //{value: "3", done: true}

当执行到return时done为true

  • 使用for of可以自动遍历 generator,但是return后面的不会遍历
function * show(){
    yield '1';
    yield '2';
    return '3';
}
let a = show();
for(let val of a){
    console.log(val);
}
//1
//2
  • 对generator函数也可以使用解构
function * show(){
    yield '1';
    yield '2';
    yield '4'
    return '3';
}
let [a,...b] = show();
console.log(a,b);//1 [2,4]

async

async写在函数前面表示这个函数是异步的

  • async特点:
    1.相比generator语义化更强
    2.await后面可以是promise对象,也可以数字、字符串、布尔
    3.async函数返回是一个promise对象
    4.只要await语句后面Promise状态变成 reject, 那么整个async函数会中断执行
  • 基本语法
async function fn() {
    let result = await ...
}
  • async函数返回一个Promise对象,async函数中return返回的值可以成为then方法回调的值
async function fn(){
    return 'welcome';
}

fn().then(res=>{
    console.log(res);//welcome
})
  • async函数抛出的错误,catch方法额参数会接收这个错误
async function fn(){
    throw new Error('Error出错了');
}

fn().then(res=>{
    console.log(res);
}).catch(err=>{
    console.log(err);//打印错误信息
})
  • await后面的Promise对象状态为rejected会终止,函数里后面的代码不会运行
async function fn(){
    await Promise.reject('出现问题了');
    let a = await Promise.resolve('success');
    console.log(a);
}

fn().then(res=>{
    console.log(res);
}).catch(err=>{
    console.log(err);
})
//出现问题了

解决出错问题的方法

//在await后面的Promise对象后面通过catch的参数接收错误
async function fn(){
    await Promise.reject('出现问题了').catch(err=>{
        console.log(err);
    });
            
    let a = await Promise.resolve('success');
    console.log(a);
}

fn().then(res=>{
    console.log(res);
});

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boboj1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值