async / await 异步 与 Promise 的区别

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 函数的语法糖
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 7,336评论 5 22
  • 简单介绍下这几个的关系为方便起见 用以下代码为例简单介绍下这几个东西的关系, async 在函数声明前使用asyn...
    _我和你一样阅读 21,282评论 1 24
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 8,701评论 0 29
  • 相对于回调函数来说,Promise是一种相对优雅的选择。那么有没有更好的方案呢?答案就是async/await。优...
    松哥888阅读 47,510评论 8 36
  • 今天在圈里遇见了“简书”,好新奇的感觉!刚好此时有了点自己的时间,写写试试吧。在这里可以跟自己谈谈心,可以...
    恋好阅读 161评论 0 0