异步解决方案、generator、async、await、pormise

211 阅读2分钟

es6新增了symbol这个数据类型,我理解为它是一个独一无二的,和谁都不相等,让我们对这个数据类型有了更深入的一个理解,

generator是解决异步的一种方案,它的一个特别之处就是在函数后面有个号function Fn(){},里面有yield,yield我们可理解为是暂停后面数据的执行,只能通过next()手动调用来执行后面的数据。

function* fn (){
        //yield可理解是一个暂停操作
       yield  1
       yield  222
       return '结果'
    }
    let g1=fn()
    //只能通过手动调用
    let g2= g1.next()
    let g3 =g1.next()
    let g4 =g1.next()
    console.log(g2)      

在没有执行到return结果时候,返回的done是false,例如{value: 1, done: false},执行到return时候,done会变为true{value: ‘结果’, done: true},

下午呢,也是说到了js方法的async、await和pormise, async和await我的理解呢,就是处理一些异步的问题,需要配合函数一起使用,await需要等到上面数据解析完成,才会执行await的数据; 只要通过.then()来接受数据的,通过await都可以实现,但是await必须配合async函数存在;

 function Fn() {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve("好好学习")
            }, 3000);
        })
    }
    async function Fn2() {
        let result = await Fn()
        return result
    }
    Fn2().then((res)=>{
        console.log(res)
    })
    console.log('JavaScript')

    //执行结果   JavaScript 三秒后输出   好好学习

await可接受任意类型的数据,一般是promise

pormise解决回调地狱的,因为请求接口时候,难免会遇到层层的嵌套,可能会产生回调地狱, pormise的状态呢有三种,pending初始,fulfilled成功,rejected失败,状态值一旦改变,无法再变,

pormise的api有:promise.then()成功的处理,promise.catch()失败的处理,promise.all(),全部成功后才返回, promise.race()请求多个接口时候,谁先请求完,谁先执行,没有固定的顺序