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

基于p2p的网站建设成都营销类网站设计

基于p2p的网站建设,成都营销类网站设计,盘锦市城乡建设厅网站,湘潭网络推广一、async 和 await 在干什么 async 是“异步”的简写#xff0c;而 await 的意思是等待。async 用于申明一个 function 是异步的#xff0c;而 await 等待某个操作完成。 async/await 是一种编写异步代码的新方法。之前异步代码的方案是回调和 promise。 async/await 像 p…一、async 和 await 在干什么 async 是“异步”的简写而 await 的意思是等待。async 用于申明一个 function 是异步的而 await 等待某个操作完成。 async/await 是一种编写异步代码的新方法。之前异步代码的方案是回调和 promise。 async/await 像 promise 一样也是非阻塞的。 async/await 让异步代码看起来、表现起来更像同步代码。这正是其威力所在。 二、async 起什么作用 这个问题的关键在于async 函数是怎么处理它的返回值的 我们当然希望它能直接通过 return 语句返回我们想要的值但是如果真是这样似乎就没 await 什么事了。所以写段代码来试试看它到底会返回什么 script async function test(){return hello async;}let result test();console.log(result); /script 看到输出就恍然大悟了——输出的是一个 Promise 对象。 Promise {resolved: hello async} 所以async 函数返回的是一个 Promise 对象。async 函数包含函数语句、函数表达式、Lambda表达式会返回一个 Promise 对象如果在函数中 return 一个直接量async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。 async 函数返回的是一个 Promise 对象所以在最外层不能用 await 获取其返回值的情况下我们当然应该用原来的方式then() 链来处理这个 Promise 对象就像这样 async function test(){return hello async;}test().then((val) {console.log(val); //hello async }) 现在回过头来想下如果 async 函数没有返回值又该如何很容易想到它会返回 Promise.resolve(undefined)。 联想一下 Promise 的特点——无等待所以在没有 await 的情况下执行 async 函数它会立即执行返回一个 Promise 对象并且绝不会阻塞后面的语句。这和普通返回 Promise 对象的函数并无二致。 那么下一个关键点就在于 await 关键字了。 三、await 到底在等啥 因为 async 函数返回一个 Promise 对象所以 await 可以用于等待一个 async 函数的返回值——这也可以说是 await 在等 async 函数但要清楚它等的实际是一个返回值。注意到 await 不仅仅用于等 Promise 对象它可以等任意表达式的结果所以await 后面实际是可以接普通函数调用或者直接量的。所以下面这个示例完全可以正确运行。 function getSomething(){return something; } async function testAsync(){return Promise.resolve(hello async); } async function test(){let v1 await getSomething();let v2 await testAsync();console.log(v1,v2); } test(); console.log(我执行了);//执行结果为: //我执行了 //something,hello async await 等到了要等的然后呢 await 等到了它要等的东西一个 Promise 对象或者其它值然后呢我不得不先说await 是个运算符用于组成表达式await 表达式的运算结果取决于它等的东西。 如果它等到的不是一个 Promise 对象那 await 表达式的运算结果就是它等到的东西。 如果它等到的是一个 Promise 对象await 就忙起来了它会阻塞后面的代码等着 Promise 对象 resolve然后得到 resolve 的值作为 await 表达式的运算结果。 看到上面的阻塞一词心慌了吧……放心这就是 await 必须用在 async 函数中的原因。async 函数调用不会造成阻塞也就是第13行代码不会被阻塞它内部所有的阻塞都被封装在一个 Promise 对象中异步执行。 async/await 帮我们干了啥 作个简单的比较 上面已经说明了 async 会将其后的函数函数表达式或 Lambda的返回值封装成一个 Promise 对象而 await 会等待这个 Promise 完成并将其 resolve 的结果返回出来。 现在举例用 setTimeout 模拟耗时的异步操作先来看看不用 async/await 会怎么写。 function takeLongTime(){return new Promise((resolve) {setTimeout(() resolve(long time value),1000);}) } takeLongTime().then((v) {console.log(get:,v); }) 如果改用 async/await 呢会是这样。 function takeLongTime(){return new Promise((resolve) {setTimeout(() resolve(long time value),1000);}) } async function test(){let v await takeLongTime();//等待异步操作的结果阻塞后面代码的执行console.log(v); } 眼尖的同学已经发现 takeLongTime() 没有申明为 async。实际上takeLongTime() 本身就是返回的 Promise 对象加不加 async结果都一样如果没明白请回过头再去看看上面的“async 起什么作用”。 又一个疑问产生了这两段代码两种方式对异步调用的处理实际就是对 Promise 对象的处理差别并不明显甚至使用 async/await 还需要多写一些代码那它的优势到底在哪 async/await 的优势在于处理 then 链 单一的 Promise 链并不能发现 async/await 的优势但是如果需要处理由多个 Promise 组成的 then 链的时候优势就能体现出来了很有意思Promise 通过 then 链来解决多层回调的问题现在又用 async/await 来进一步优化它。 假设一个业务分多个步骤完成每个步骤都是异步的而且依赖于上一个步骤的结果。我们仍然用 setTimeout 来模拟异步操作 /** 传入参数n,表示这个函数执行的时间(毫秒)* 执行的结果是 n200,这个值将用于下一步骤 */ 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(){console.time(doIt);let 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: 1510.2490234375ms 输出结果 result 是 step3() 的参数 700 200 900。doIt() 顺序执行了三个步骤一共用了 300 500 700 1500 毫秒和 console.time()/console.timeEnd() 计算的结果一致。 如果用 async/await 来实现呢会是这样。 async function doIt() {console.time(doIt);let time1 300;let time2 await step1(time1);//将Promise对象resolve(n200)的值赋给time2let time3 await step1(time2);let result await step1(time3);console.log(result is ${result});console.timeEnd(doIt); }doIt();//执行结果为: //step1 with 300 //step2 with 500 //step3 with 700 //result is 900 //doIt: 1512.904296875ms 结果和之前的 Promise 实现是一样的但是这个代码看起来是不是清晰得多几乎跟同步代码一样。 还有更酷的 现在把业务要求改一下仍然是三个步骤但每一个步骤都需要之前每个步骤的结果。 /** 传入参数n,表示这个函数执行的时间(毫秒)* 执行的结果是 n200,这个值将用于下一步骤 */ 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(m,n){console.log(step2 with ${m} ${n});return takeLongTime(m n); } function step3(k,m,n){console.log(step3 with ${k} ${m} ${n});return takeLongTime(k m n); } 这回先用 async/await 来写 async function doIt() {console.time(doIt);let time1 300;let time2 await step1(time1);//将Promise对象resolve(n200)的值赋给time2let time3 await step2(time2,time1);let result await step3(time3,time2,time1);console.log(result is ${result});console.timeEnd(doIt); }doIt();//执行结果为: //step1 with 300 //step2 with 500 300 //step3 with 1000 500 300 //result is 2000 //doIt: 2916.655029296875ms 除了觉得执行时间变长了之外似乎和之前的示例没啥区别啊别急认真想想如果把它写成 Promise 方式实现会是什么样子 function doIt() {console.time(doIt);let time1 300;step1(time1).then((time2) {return step2(time1,time2).then((time3) [time1,time2,time3])//step3需要用到time1,time2,time3因此需要返回}).then((times) {let [time1,time2,time3] times;return step3(time1,time2,time3)}).then((result) {console.log(result is ${result});console.timeEnd(doIt);}) }doIt();//执行结果为: //step1 with 300 //step2 with 300 500 //step3 with 300 500 1000 //result is 2000 //doIt: 2919.49609375ms 有没有感觉有点复杂的样子那一堆参数处理就是 Promise 方案的死穴—— 参数传递太麻烦了看着就晕 注意点 就目前来说已经理解 async/await 了吧但其实还有一些事情没提及——Promise 有可能 reject 啊怎么处理呢 await 命令后面的 Promise 对象运行结果可能是 rejected所以最好把 await 命令放在 try...catch 代码块中。 async function myFunction() {try {await somethingThatReturnAPromise();} catch (err){console.log(err);} }//另一种写法 async function myFunction() {await somethingThatReturnAPromise().catch(function(err) {console.log(err);}) }
http://www.hkea.cn/news/14325014/

相关文章:

  • 安能物流网站wordpress打折插件
  • 免费做app网站有哪些90设计网站会员全站通与电商模板的区别
  • 自己做的网站能被百度收录吗做网站与网店运营
  • 网站建设哪家公司好成都网站建设网站设计论坛
  • 重庆做兼职哪个网站网页版梦幻西游礼品码
  • 网站开发培训训高端开发网站哪家专业
  • 网站开发程序员的工资是多少建设境外网站需要什么手续
  • 长沙模板网站建设高端网站建设文案
  • 网站做301跳转的方法站长工具的使用seo综合查询运营
  • ytwzjs烟台网站建设分类信息网站成都搭建
  • 个人注册公司查询搜索 引擎优化
  • 正规网站建设空间徐州建设工程交易网站质量监督
  • 模板网站的域名是什么意思手机实用网站
  • 深圳网站优化哪家好wordpress isadmin
  • 凌晨网站建设公司英文淘宝网站建设
  • 如何避免网站被降权做宠物店网站
  • 网站建设督查报告品牌推广和市场推广的区别
  • 常德交通网站西南交通建设集团股份有限公司网站
  • 在网站上做宣传上海徐汇做网站
  • 展示型网站 数据库黑龙江恒泰建设集团网站
  • 什么网站不能备案移动端网站制作的有哪些要求
  • 海外酒店网站建设黔西南北京网站建设
  • 广州服装网站建设惠州做网站公司哪家好
  • 跨境电商在哪些网站上面做国外域名注册价格
  • 东莞公司网站做优化微信开发公司是哪个
  • 道滘镇仿做网站简历模板表格
  • 合肥网站建设设计外包自己怎么做网站的聚合页面
  • 查询网站个人主页在哪里
  • 品牌网站建设小7a蝌蚪网站改版需要注意什么
  • 电子商务网站设计思路瑞安网站建设优化