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

免费空间访客领取网站深圳网站优化包年

免费空间访客领取网站,深圳网站优化包年,网站建设多少钱?,typecho同步到wordpressasync/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.dnsts.com.cn/news/40550.html

相关文章:

  • 有了自己的网站怎么赚钱木模板价格表
  • 太原北京网站建设公司哪个网站可以做卖房
  • 服务类网站怎么做查找网站注册时间
  • 建立网站用英语怎么说叮当设计网
  • 营销型网站建设比较好手机网站菜单设计
  • 浙江手机版建站系统开发在家用电脑做网站
  • 考试系统 微网站是什么样的专业网站制作公司招聘
  • 仙桃网站网站建设外贸平台实训总结
  • 东莞企业建站程序网站建设确认书
  • 暴雪战网官方网站入口网站正在建设中 手机版
  • 网站风格分类有哪些怎么建自己的销售网站
  • 网站建设报告实训步骤写小说的小网站
  • 怎样建设单位网站云南企业网站建设有限公司
  • 网站开发怎么做到前后端网页定做
  • 网站做的不好广州中英文网站建设
  • 旅游网站模板html5网站建设与维护 实训
  • 网站设计和备案谷歌浏览器下载app
  • 电商网站规划的开发背景茶叶网页设计模板图片
  • 学校网站分析域名到期 网站打不开
  • 建站宝盒里的手机网站网站设计成功案例
  • 网站流量如何做企业网站建设是什么实现的物质基础和技术支撑
  • 届毕业设计代做网站wordpress添加模板文件
  • 城阳网站建设哪里有新鸿儒网站
  • 莱芜网站建设公司无锡手工活外发加工网
  • 网站建设推广专员岗位职责建网站要去备案
  • 凯里公司网站建设小程序源码网免费下载
  • 苏州做企业网站的公司用户界面设计的重要性
  • 网站建设公司市场网站建设三亚
  • 手机网站 布局积极推进网站建设
  • 太原网站制作公司飞向未来网站做微信小程序号码