作家
登录

JavaScript与异步编程

作者: 来源: 2017-07-13 15:03:48 阅读 我要评论

JavaScript与异步编程

【引自老帖子的博客】什么是异步(Asynchrony)

按照维诽谤科上的解释:自力于主控制流之外产生的事宜就叫做异步。比如说有一段次序履行的代码

例如 setTimeout。这个函数会起一个准时器,在跨越指准时光后履行指定的函数。比如在一秒后输出数字 1,代码如下:

  1. void function main() { 
  2.   fA(); 
  3.   fB(); 
  4. }(); 

fA => fB 是次序履行的,永远都是 fA 在 fB 的前面履行,他们就是 同步 的关系。参加这时应用 setTimeout 将 fB 延后

  1. void function main() { 
  2.   setTimeout(fA, 1000); 
  3.   fB(); 
  4. }(); 

这时,fA 相对于 fB 就是异步的。main 函数只是声清楚明了要在一秒后履行一次 fA,而并没有急速履行它。这时,fA 的┞菲握流就自力于 main 之外。

JavaScript——生成异步的说话

因为 setTimeout 的存在,至少在被 ECMA 标准化的那一刻起,JavaScript 就支撑异步编程了。与其他说话的 sleep 不合,setTimeout 是异步的——它不会阻挡当前法度榜样持续往下履行。

然而异步编程真正成长强大年夜,Ajax 的风行功弗成没。Ajax 中的 A(Asynchronous)真正获得了异步的概念——这照样 IE5、IE6 的时代。

回调函数——异步编程之痛

异步义务履行完毕之后如何通知开辟者呢?回调函数是最朴实的,轻易想到的实现方法。于是大年夜异步编程出生的那一刻起,它就和回调函数绑在了一路。

代码的履行次序是如许:

  1. 请求 gen,获得一个迭代器 iter。留意此时并未真正履行 gen 的函数体。
  2. 调用 iter.next(),履行 gen 的函数体。
  3. 碰到 yield 1,将 1 返回,iter.next() 的返回值即为 { done: false, value: 1 },输出 1
  4. 调用 iter.next()。大年夜前次 yield 出去的处所持续往下履行 gen。
  5. 碰到 yield 2,将 2 返回,iter.next() 的返回值即为 { done: false, value: 2 },输出 2
  6. 调用 iter.next()。大年夜前次 yield 出去的处所持续往下履行 gen。
  7. 碰到 return 3,将 3 返回,return 表示全部函数已经履行完毕。iter.next() 的返回值即为 { done: true, value: 3 },输出 3

惯例用法。如不雅需求有变,须要每秒输出一个数字(当然不是用 setInterval),JavaScript 的初学者可能会写出如许的代码:

  1. for (let i = 1; i < 10; ++i) { 
  2.   setTimeout(() => { // 缺点! 
  3.     console.log(i); 
  4.   }, 1000); 

履行结不雅是等待 1 秒后,一次性输出了所有结不雅。因为这里的轮回是同时启了 10 个准时器,每个准时器都等待 1 秒,结不雅当然是所有准时器在 1 秒后同时超时,触发还调函数。

解法也简单,只须要在前一个准时器超时后再启动另一个准时器,代码如下:

  1. setTimeout(() => { 
  2.   console.log(1); 
  3.   setTimeout(() => { 
  4.     console.log(2); 
  5.     setTimeout(() => { 
  6.       console.log(3); 
  7.       setTimeout(() => { 
  8.         console.log(4); 
  9.         setTimeout(() => { 
  10.           console.log(5); 
  11.           setTimeout(() => { 
  12.             // ... 
  13.           }, 1000); 
  14.         }, 1000); 
  15.       }, 1000) 
  16.     }, 1000) 
     1/4    1 2 3 4 下一页 尾页

      推荐阅读

      Web开发中的响应式图片处理

    今朝手机等移动设备网站开辟已经有比较好的解决筹划,一种是响应式网站,像笔者博客一样,PC网站就是移动网站,一种是把移动网站和PC网站分开,类似淘宝那样。大年夜网站搜刮引擎优化的角>>>详细阅读


    本文标题:JavaScript与异步编程

    地址:http://www.17bianji.com/lsqh/36197.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)