作家
登录

浅谈JavaScript中的异步处理

作者: 来源: 2017-08-28 16:58:07 阅读 我要评论

  1. run(getData) 

在 JavaScript 的世比赛,所有代码都是单线程履行的,因为这个“缺点”,导致 JavaScript 的所有收集操作,浏览器事宜,都必须是异步履行。

异步操作会在将来的某个时光点触发一个函数调用。

主流的异步处理筹划重要有:回调函数 (CallBack) 、 Promise 、 Generator 函数、 async/await 。

浅谈JavaScript中的异步处理

一、回调函数(CallBack)

这是异步编程最根本的办法

假设我们有一个 getData 办法,用于异步获取数据,第一个参数为请求的 url 地址,第二个参数是回调函数,如下:

  1. function getData(url, callBack){ 
  2.     // 模仿发送收集请求 
  3.     setTimeout(()=> { 
  4.         // 假设 res 就是返回的数据 
  5.         var res = { 
  6.             url: url, 
  7.             data: Math.random() 
  8.         } 
  9.         // 履行回调,将数据作为参数传递 
  10.         callBack(res) 
  11.     }, 1000) 
  1. getData('/page/1?param=123', (res1) => { 
  2.     console.log(res1) 
  3.     getData(`/page/2?param=${res1.data}`, (res2) => { 
  4.         console.log(res2) 
  5.         getData(`/page/3?param=${res2.data}`, (res3) => { 
  6.             console.log(res3) 
  7.         }) 
  8.     }) 
  9. }) 
  • 经由过程膳绫擎的代码可以看出,第一次请求的 url 地址为: /page/1?param=123 ,返回结不雅为 res1 。
  • 第二个请求的 url 地址为: /page/2?param=${res1.data} ,依附第 一次请求的 res1.data ,返回结不雅为 res2`。
  • 第三次请求的 url 地址为: /page/3?param=${res2.data} ,依附第二次请求的 res2.data ,返回结不雅为 res3 。

因为后续请求依附前一个请求的结不雅,所以我们只能把下一次请求写到上一次请求的回调函数内部,如许就形成了常说的:回调地狱。

二、宣布/订阅

我们假定,存在一个”旌旗灯号中间”,某个义务履行完成,就向旌旗灯号中间”宣布”( publish )一个旌旗灯号,其他义务可以向旌旗灯号中间”订阅”( subscribe )这个旌旗灯号,大年夜而知道什么时刻本身可以开端履行。这就叫做”宣布/订阅模式”(publish-subscribe pattern),又称”不雅察者模式”(observer pattern)

这个模式有多种实现,下面采取的是Ben Alman的 Tiny Pub/Sub ,这是 jQuery 的一个插件

起首, f2 向”旌旗灯号中间” jQuery 订阅” done “旌旗灯号

  1. jQuery.subscribe("done", f2); 

f1进行如下改写

  1. function f1(){ 
  2. setTimeout(function(){ 
  3. // f1的义务代码 
  4. jQuery.publish("done"); 
  5. }, 1000); 

jQuery.publish("done") 的意思是, f1 履行完成后,向”旌旗灯号中间 "jQuery 宣布 "done" 旌旗灯号,大年夜而激发f2的履行。 此外,f2完成履行后,也可以撤消订阅( unsubscribe )

	
			
 1/4    1 2 3 4 下一页 尾页

  推荐阅读

  物联网时代如何管理上百万设备?找风河DLM就对了!

Victor告诉记者,在设备全部治理周期中,安然是最特别的一环,它不仅仅是贯穿全部周期,更重要的是,它必须在>>>详细阅读


本文标题:浅谈JavaScript中的异步处理

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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