美文网首页es6
async / await 异步 与 Promise 的区别

async / await 异步 与 Promise 的区别

作者: Jetsly | 来源:发表于2017-01-14 11:34 被阅读389次

    async / await

    如果使用过c#的异步写法里面的async / await基本上就很快理解啦,几乎都是把异步的方法变成了同步的方法
    ,代码测试地址

    1. async函数返回一个Promise对象。

    var log=async ()=>{
       return 1; //等同于 return await 1; 或 return Promise.resolve(1); 
    }
    log().then(v => console.log(v))
    

    await 关键字必须在async函数里面,但是async函数里面不一定会有await

    2.await会阻塞的当前直到完成

    let log = await getLog();
    let test = await getTest(); 
    

    只有getLog完成以后,才会执行getTest,所以可以采用如下方法并发执行

    // 写法一
    let [log, test] = await Promise.all([getLog(), getTest()]);
    
    // 写法二
    let logResult = getLog();
    let testResult = getTest();
    let log = await logResult;
    let test = await testResult;
    

    3. async返回reject的方法,当抛出异常等同于reject

    var log=async ()=>{
      await Promise.reject(1); //等同于 return Promise.reject(1);或 throw 1;
    }
    log().catch(v => console.log(v))
    

    Promise.rejectthrow都可以通过try{}catch(){}来阻止reject的触发

    4. async / awaitPromise的主要区别是

    1. Promise代码完全都是PromiseAPIthencatch等等),操作本身的语义反而不容易看出来,
    2. async / await函数的实现最简洁,最符合语义,几乎没有语义不相关的代码
    3. async / await 函数就是 Generator 函数的语法糖

    相关文章

      网友评论

        本文标题:async / await 异步 与 Promise 的区别

        本文链接:https://www.haomeiwen.com/subject/sseebttx.html