当前位置: 首页 > news >正文

免费空间访客领取网站湛江网站制作费用

免费空间访客领取网站,湛江网站制作费用,性价比高seo的排名优化,织梦网站地图修改async/await 的理解 async/await 其实是 Generator 的语法糖#xff0c;它能实现的效果都能用then 链来实现#xff0c;它是为优化 then 链而开发出来的。从字面上来看#xff0c;async 是“异步”的简写#xff0c;await 则为等待#xff0c;所以很好理解async用于申明一…async/await 的理解 async/await 其实是 Generator 的语法糖它能实现的效果都能用then 链来实现它是为优化 then 链而开发出来的。从字面上来看async 是“异步”的简写await 则为等待所以很好理解async用于申明一个 function 是异步的而 await 用于等待一个异步方法执行完成。当然语法上强制规定 await 只能出现在asnyc 函数中先来看看 async 函数返回了什么 async function testAsy() {return hello world;; } let result testAsy(); console.log(result); Promise {fulfilled: hello world;} [[Prototype]]: Promise [[PromiseState]]: fulfilled [[PromiseResult]]: hello world;所以async 函数返回的是一个 Promise 对象。async 函数包含函数语句、函数表达式、Lambda 表达式会返回一个Promise对象如果在函数中 return 一个直接量async 会把这个直接量通过Promise.resolve() 封装成 Promise 对象。async 函数返回的是一个 Promise 对象所以在最外层不能用await 获取其返回值的情况下当然应该用原来的方式then()链来处理这个 Promise 对象就像这样 async function testAsy() {return hello world;; } let result testAsy(); console.log(result); result.then(res {console.log(res); // hello world; })那如果 async 函数没有返回值又该如何很容易想到他会返回 Promise.resolve(undefined);联想一下 Promise 的特点——无等待所以在没有await 的情况下执行 async 函数它会立即执行返回一个Promise 对象并且绝不会阻塞后面的语句。这和普通返回Promise 对象的函数并无二致。 注意Promise.resolve(x) 可以看作是new Promise(resolveresolve(x)) 的简写可以用于快速封装字面量对象或其他对象将其封装成 Promise 实例。async/await 的优势 单一的 Promise 链并不能发现 async/await 的优势但是如果需要处理由多个 Promise 组成的 then 链的时候优势就能体现出来了很有意思Promise 通过 then 链来解决多层回调的问题现在又用 async/await 来进一步优化它。 假设一个业务分多个步骤完成每个步骤都是异步的而且依赖于上一个步骤的结果。仍然用 setTimeout 来模拟异步操作 function takeLongTime(n) {return new Promise(resolve {setTimeout(() resolve(n 200), n)}) };function step1(n) {console.log(step1 with ${n});return takeLongTime(n); } function step2(n) {console.log(step2 with ${n});return takeLongTime(n); } function step3(n) {console.log(step3 with ${n});return takeLongTime(n); }现在用 Promise 方式来实现这三个步骤的处理 function doIt(n) {console.time(doIt);const time1 300;step1(time1).then(time2 step2(time2)).then(time3 step3(time3)).then(result {console.log(result is ${result});console.timeEnd(doIt);}); }doIt(); step1 with 300 step2 with 500 step3 with 700 result is 900 doIt: 1.652s 输出结果 result 是 step3() 的参数 700 200 900。doIt()顺序执行了三个步骤一共用了 300 500 700 1500 毫秒和console.time()/console.timeEnd() 计算的结果一致。如果用 async/await 来实现呢会是这样 async function doIt() {console.time(doIt);const time1 300;const time2 await step1(time1);const time3 await step2(time2);const result await step3(time3);console.log(result is ${result});console.timeEnd(doIt); } doIt(); step1 with 300 step2 with 500 step3 with 700 result is 900 doIt: 1.515s结果和之前的 Promise 实现是一样的但是这个代码看起来是不是清晰得多几乎跟同步代码一样 async/await 对比 Promise 的优势 代码读起来更加同步Promise 虽然摆脱了回调地狱但是then的链式调⽤也会带来额外的阅读负担 Promise 传递中间值⾮常麻烦⽽async/await⼏乎是同步的写法⾮常优雅 错误处理友好async/await 可以⽤成熟的try/catchPromise的错误捕获⾮常冗余 调试友好Promise 的调试很差由于没有代码块你不能在⼀个返回表达式的箭头函数中设置断点如果你在⼀个.then 代码块中使⽤调试器的步进(step-over)功能调试器并不会进⼊后续的.then代码块因为调试器只能跟踪同步代码的每⼀步。
http://www.hkea.cn/news/14518360/

相关文章:

  • 英文企业网站带后台有数据库北京网站建设价格便宜
  • 河南建设网站官网微商城手机网站制作公司
  • 建设网站需要会什么免费wordpress主题
  • 建设个人网站用什么软件做网站的网页图片素材怎么找
  • 给别人做网站挣钱wordpress个人支付
  • 烟台电商网站开发江苏建安建设有限公司网站
  • 百度网盘官网网页版seo快速排名软件网址
  • 厦门网站建设建网站网页设计师使用的是什么的屏幕显示颜色模式
  • 购物网站设计开题报告宣传片广告公司
  • 大连企业网站模板建站做婚恋网站多少钱
  • 江西省住房和建设规划局局网站政协网站建设情况汇报
  • 高端的赣州网站建设新余网站设计
  • 视频网站亏钱为什么还要继续做中国科技成就排比句
  • 亚马逊海淘官网保定网站建设seo优化营销
  • 天津工程建设网官方网站wordpress类别图标
  • 株洲网站建设公司自学网站建设多久
  • 江苏神禹建设有限公司网站优秀单页网站
  • 使用top域名做网站网页设计模板免费网站
  • 安家堡网站建设百度公司官网首页
  • 网站建设文字设计网络最有效的推广方法
  • 网站建设哪些网站更改logo
  • 找人开发一个网站多少钱广州做网站(信科网络)
  • 如何制造公司网站北京广告设计招聘
  • 福州男同性做基网站saas建站工具
  • 安徽黄山网站建设移动网站系统
  • 怎样做网站外链wordpress表单邮件
  • 夹江移动网站建设中国建设银行东营分行网站
  • 自行建造网站高质量视频素材网站
  • 旅游网站的设计与建设wordpress写网页教程
  • 怎么查看网站是否被百度惩罚降权或者被k扬中最新招聘信息