- run(getData)
在 JavaScript 的世比赛,所有代码都是单线程履行的,因为这个“缺点”,导致 JavaScript 的所有收集操作,浏览器事宜,都必须是异步履行。
异步操作会在将来的某个时光点触发一个函数调用。
主流的异步处理筹划重要有:回调函数 (CallBack) 、 Promise 、 Generator 函数、 async/await 。
一、回调函数(CallBack)
这是异步编程最根本的办法
假设我们有一个 getData 办法,用于异步获取数据,第一个参数为请求的 url 地址,第二个参数是回调函数,如下:
- function getData(url, callBack){
- // 模仿发送收集请求
- setTimeout(()=> {
- // 假设 res 就是返回的数据
- var res = {
- url: url,
- data: Math.random()
- }
- // 履行回调,将数据作为参数传递
- callBack(res)
- }, 1000)
- }
- getData('/page/1?param=123', (res1) => {
- console.log(res1)
- getData(`/page/2?param=${res1.data}`, (res2) => {
- console.log(res2)
- getData(`/page/3?param=${res2.data}`, (res3) => {
- console.log(res3)
- })
- })
- })
- 经由过程膳绫擎的代码可以看出,第一次请求的 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 “旌旗灯号
- jQuery.subscribe("done", f2);
f1进行如下改写
- function f1(){
- setTimeout(function(){
- // f1的义务代码
- jQuery.publish("done");
- }, 1000);
- }
jQuery.publish("done") 的意思是, f1 履行完成后,向”旌旗灯号中间 "jQuery 宣布 "done" 旌旗灯号,大年夜而激发f2的履行。 此外,f2完成履行后,也可以撤消订阅( unsubscribe )
推荐阅读
Victor告诉记者,在设备全部治理周期中,安然是最特别的一环,它不仅仅是贯穿全部周期,更重要的是,它必须在>>>详细阅读
本文标题:浅谈JavaScript中的异步处理
地址:http://www.17bianji.com/lsqh/36972.html
1/2 1