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

南京网站制作链接全网推广平台有哪些

南京网站制作链接,全网推广平台有哪些,电子商务专业介绍,wordpress怎么弄垂直分类为什么要引入async/await操作符#xff1f; 对于js的异步编程场景#xff0c;无论是使用xhr回调还是promise回调#xff0c;当异步操作过多并且每个动作之间存在依赖关系#xff08;即需要串行执行#xff09;时#xff0c;代码的可读性和维护性会变得很差。async/await…为什么要引入async/await操作符 对于js的异步编程场景无论是使用xhr回调还是promise回调当异步操作过多并且每个动作之间存在依赖关系即需要串行执行时代码的可读性和维护性会变得很差。async/await以同步代码的形式很好地解决了这个问题。 因为async/await的底层实现使用generator和promise所以首先要了解generator的原理。 生成器函数generator function* genDemo() {console.log(开始执行第一段)yield generator 2console.log(开始执行第二段)yield generator 2console.log(开始执行第三段)yield generator 2console.log(执行结束)return generator 2 }console.log(main 0) let gen genDemo() console.log(gen.next().value) console.log(main 1) console.log(gen.next().value) console.log(main 2) console.log(gen.next().value) console.log(main 3) console.log(gen.next().value) console.log(main 4)带*号的函数就叫生成器函数是可以暂定执行和恢复执行的。 在执行过程中如果遇到yield关键字函数会返回关键字后面的内容给外部然后暂停执行。 外部可以使用next方法来恢复执行该函数。 v8是如何实现函数的执行和恢复的呢这里需要引入协程的概念。 协程 协程是一种比线程更轻量级的存在可以理解为是在线程上运行的任务。一个线程可以存在多个协程但同时只能执行一个协程。如果当前执行的是A协程要启动B协程就需要暂停A协程把js主线程的控制权交给B协程这样表现为A协程暂停B协程开始执行此时我们把A协程称为B协程的父协程。 分析上面的示例代码执行过程如下 js主线程执行genDemo方法生成gen协程。js主线程执行gen.next方法此时js引擎会保存当前主线程父协程调用栈信息开始执行gen协程。gen协程碰上yield关键词会保存当前gen协程的调用栈信息并将关键词后的内容返回给父协程并暂定执行gen协程恢复执行父协程即外部代码后续反复执行2和3的步骤直接主线程代码执行完。 结论 gen协程和父协程是交替执行的它们通过yield和next配合完成切换。 async/await async async function foo() { console.log(1); return 2 } var p foo(); console.log(p); // 1 // Promise { 2 }从以上代码可以得知async声明后的函数返回了一个Promise对象状态是resolved上述代码等价于 function foo() { console.log(1); return new Promise(resolve resolve(2)) } var p foo(); console.log(p);await async function foo() { console.log(1) let a await 100 console.log(a) console.log(2) } console.log(0) foo() console.log(3) // 0 // 1 // 3 // 100 // 2分析执行过程 输出0主线程保存父协程调用栈信息开始执行foo协程输出1遇到await操作符await操作符干了很多事情。 let a await 100首先相当于执行了new Promise(resolve resolve(100)); 然后将主线程控制权交给父协程同时将该promise对象返回给父协程父协程调用promise对象的then方法监控promise状态的改变。输出3宏任务队列执行完成检查微任务队列执行promise对象的then方法回调并将返回值传给foo协程并执行foo协程输出100输出2完成 手动实现async、await ​​​​​​​ 1. 创建启动函数**传入生成器函数**判断传入值是否生成器函数 2. 创建执行函数**接收一个参数**每次 next 后的返回值 { value , done } - 通过判断 v.done 决定递归是否结束 - 递归执行自身并判断返回值如果是 **promise对象** 就调用 .then 等待异步执行后执行 next 并将 promise 结果传入如果是**基本类型**就直接执行 next 函数传入 value 值即可 3. **执行启动函数**传入generator.next() // promise 函数 function getData (data, time 1000) {// 返回 promise 对象if (typeof data object) {return new Promise(function (resolve, reject) {setTimeout(function () {resolve(data)}, time)})}// 返回普通类型else {return data} }// function* async function function* test () {let res1 yield getData(字符串); // yield awaitconsole.log(res1, res1);let res2 yield getData({ data: [1, 2, 3] });console.log(res2, res2);let res3 yield getData({ data: { a: 1 } }, 3000);console.log(res3, res3);let res4 yield getData(true);console.log(res4, res4); }// async await 底层原理启动一个自执行的生成器函数 function start (fn) {// 1 判断是否传入生成器函数if (fn.constructor.name ! GeneratorFunction) {throw new Error(it is not a generator function.)}// 2 执行获取生成器对象let generator fn()// 3 创建一个执行函数val 执行 next 函数后的值let execute (val) {// 1 递归结束if (val.done) return;// 2 判断类型if (val.value instanceof Promise) {// 3 递归执行val.value.then(res {execute(generator.next(res))}, err {generator.throw(err)})} else {// 3 递归执行Promise.resolve(val.value).then(res {execute(generator.next(res))})}}// 4 启动执行函数execute(generator.next()) }console.log(1); start(test) console.log(2);
http://www.pierceye.com/news/538311/

相关文章:

  • 加强红色网站建设网页设计图片显示不出来
  • 玉林网站建设徐州铜山区
  • 福建网站建建设方案单一产品销售网站建设模板
  • 免费开源门户网站系统网站seo优化如何做
  • html网站分页怎么做wordpress cms plugin
  • 一个网站如何做seo优化卖书网站开发的背景
  • jsp网站开发源码实例广州网站优化排名推广
  • 网站建设中网站需求分析报告百度网盘电脑版下载
  • 爱做网站网址工商网站注册公司
  • 住房和城乡建设部网站下载魔改wordpress主题
  • dremrever怎么做网站阿里云php网站建设教程
  • 网站建设课程旅行社手机网站建设方案
  • 书店网站建设策划书总结关于外贸公司的网站模板
  • 张家港市规划建设网站房地产估价师
  • 创建网站有什么用南京做网站优化的企业
  • 网站seo设置是什么怎么知道网站被百度k了
  • 个人网站开发的意义自己建设网站需要什么手续
  • 网站的建设流程怎样使用仿站小工具做网站
  • 佛山企业模板建站企业微信管理系统
  • 百度推广登录网站网站开发需要什么技术人员
  • 有关网站升级建设的申请书中国工业设计公司
  • 线上销售怎么做优化网站哪家好
  • 成都网站建设备案audio player wordpress 使用
  • 做网站设计的公司上海装修公司名字
  • 处理器优化软件se 网站优化
  • 网站制作公司汉狮网络电子商务网站建设评估的指标有哪些?
  • asp网站伪静态教程网站建设多少钱实惠湘潭磐石网络
  • wordpress 外贸网站建设wordpress模板安装
  • 中国精准扶贫网站建设现状惠安规划局建设局网站
  • 营销型网站制作建设网络营销推广技巧