js异步编程,看这一篇就够了。

161 阅读1分钟

js发展到现在,异步编程可以划分四个阶段,也就是有四种异步编程的方式。

1. 回调函数 callback

foo(val, () => {
    foo(val1, () => {
        foo(val2, () => {
            foo(val3, () => {
                //do something   
            })
        })
    })
})

会导致回调地狱,不能使用try/catch捕捉错误

2. promise

function bar() {
    return new Promise((res, rej) => {
        foo(val, (data, err) => {
            if (data) res(data);
            rej(err)
        })
    })
}

bar(val).then(data => {
    return bar(val1);
}).then(data => {
    return bar(val2)
}).then(data => {
    return bar(val3)
}).catch(err => {
    console.log(err);
})

改写上面的回调函数

3. generator/yield

let co = require('co')

function* bar() {
    yield foo(val);
    yield foo(val1);
    yield foo(val2);
    yield foo(val3);
}

co(bar()).then(data => {
    //...
}).catch(err => {
    console.log(err);
})

需要自己写迭代器函数,可以借助于co库来实现

4. async/await

async function bar(val) {
    try {
        let p1 = await foo(val);
        let p2 = await foo(p1);
        let p3 = await foo(p2);
        let p4 = await foo(p3);
        return p4;
    } catch (err) {
        console.log(err);
    }
}

generator函数和自执行器(co)封装而成
使用try/catch来捕获错误。


记录记录!