程序员

异步处理——Promise,Generator,async

2020-06-10  本文已影响0人  Taco_King

持续更新中......

ES6

Promise

// Promise 新建后就会立即执行
const promise = new Promise((resolve,reject)=>{
    // some code
    if(/*操作成功*/){
        // pending->resolved
        resolve(data);
    }else {
        // pending->rejected
        reject(data);
    }
})
// 回调
promise().then(data=>{
    console.log(data)
})

Promise可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数,为Promise对象提供了统一的接口,使得控制更容易

缺点:无法中途取消Promise,一旦新建就会执行;如果不设置回调函数,不会主动抛出异常;无法得知pending处于具体何种状态,比如刚开始,还是即将完成

Generator

function* ExampleGenerator(){
    yield 'hello~';
    yield 'king';
    return 'bye~'
}
let eg = ExampleGenerator();
eg.next();  // {value: "hello~", done: false}
eg.next();  // {value: "king", done: false}
eg.next();  // {value: "bye~", done: true}
eg.next();  // {value: undefined, done: true}

Generator被调用之后,并不会被执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象(遍历器Iterator对象),Generator 函数可以理解为是一个状态机,封装了多个内部状态

持续更新中......

async

async是Generator 函数的语法糖,ES2017 标准引入了 async 函数,使得异步操作变得更加方便

const asy = async function(){
    let a = await 'hello';
    let b = await 'bye';
    console.log(a);
    console.log(b);
}
asy(); // 'hello' 'bye'

与Generator区别

上一篇 下一篇

猜你喜欢

热点阅读