异步和这一小节的知识点其实并不是一个概念,但是这个两个名词确实是很多人混淆的知识点,其实混淆的原因可能只是两个名词在中文的相似,在英文上来说完全是不同的单词。...并发是宏观概念,我分别有任务A和任务B,在一段时间内通过任务间的切换完成了这两个任务,这种情况就可以成为并发。并行是微观概念,假设cpu中存在两个核心,那么我就可以同时完成任务A,B。...同时完成多个任务的情况就可以称之为并行。回调函数(callback)面试题: 什么是回调函数?回调函数有什么缺点?如何解决回调地狱问题?...当然,我们可以通过 Generator 函数解决回调地狱的问题,可以把之前的回调地狱例子改写为如下代码:function *fetch() { yield ajax(url, () => {})...,可以把之前的回调地狱例子改写为如下代码:ajax(url) .then(res => { console.log(res) return ajax(url1) }).then(
在上一节,我们讲到了在早期我们都是通过使用回调(Callback)的形式向服务器发起网络请求,随后通过注册的回调函数拿到返回的数据,当时我们也提到了基于 Callback 的形式很容易造成回调函数嵌套、...; }) 以链式的方式来写,极大的提高了阅读体验,相比回调嵌套确实解决了回调地狱问题,done() 是之前的 success() 方法,fail() 是之前 error() 方法。...封装一个自己的 Deferred 对象 deferred 对象的执行将状态分为三个:未完成、已完成、已失败。...调用 dtd.resolve() 是将执行状态变为已完成,会调用 done() 方法指定的回调函数。执行 dtd.reject() 是将执行状态变为已失败,会调用 fail() 方法指定的回调函数。...dtd.resolve(); // 调用 Deferred 的执行状态为已完成 // 如果出错也可调用 dtd.reject(); } setTimeout(tasks,5000)
如果其中一个操作数是对象(包括数组),则首先对其调用 ToPrimitive 抽象操作(规范 9.1 节),该抽象操作再调用 [[DefaultValue]](规范 8.12.8 节),以数字作为上下文...let a; } 复制代码 a = 2 试图在 let a 初始化 a 之前使用该变量(其作用域在 { .. } 内),这里就是 a 的 TDZ,会产生错误。...(TDZ) let b; } 复制代码 回调 省点回调 构造一个超时验证工具: function timeoutify(fn, delay) { var intv = setTimeout(function...', asyncify(result)) a++ 复制代码 不管这个 Ajax 请求已经在缓存中并试图对回调立即调用,还是要从网络上取得,进而在将来异步完成,这段代码总是会输出 1,而不是 0——result...只能异步调用,这意味着 a++ 有机会在 result(..) 之前运行。
Promises 让我们辨明一些误解:Promise不是回调的替代品。Promise提供了一种可信的中介机制 —— 也就是,在你的调用代码和将要执行任务的异步代码之间 —— 来管理回调。...假定你始于使用一个ajax(..)工具,它期预期要调用一个错误优先风格的回调: function ajax(url,cb) { // 发起请求,最终调用 `cb(..)` } // .....,它接收一个或两个回调函数。第一个函数(如果存在的话)被看作是promise被成功地完成时要调用的处理器。...在ES6之前,对于称为then(..)的方法从来没有任何特别的保留措施,正如你能想象的那样,在Promise出现在雷达屏幕上之前就至少有那么几种情况,它已经被选择为方法的名称了。...它返回一个promise,这个promise会在所有的值完成时完成,或者在这些值中第一个被拒绝的值出现时被立即拒绝。
其实混淆的原因可能只是两个名词在中文上的相似,在英文上来说完全是不同的单词。并发是宏观概念,我分别有任务 A 和任务 B,在一段时间内通过任务间的切换完成了这两个任务,这种情况就可以称之为并发。...当然,我们可以通过 Generator 函数解决回调地狱的问题,可以把之前的回调地狱例子改写为如下代码:function \*fetch() { yield ajax(url, () => {})...,可以把之前的回调地狱例子改写为如下代码:ajax(url) .then(res => { console.log(res) return ajax(url1) }).then(...,在执行到 await 10 之前变量 a 还是 0,因为 await 内部实现了 generator ,generator 会保留堆栈中东西,所以这时候 a = 0 被保存了下来因为 await 是异步操作...)}demo()以上代码在浏览器环境中,如果定时器执行过程中出现了耗时操作,多个回调函数会在耗时操作结束以后同时执行,这样可能就会带来性能上的问题。
.json') }).then(ret => { return ajax('/json4.json') }) 这种链式调用是不是很熟悉,在jqeury中也有链式调用,jquery中是返回了本身这个对象所以可以实现链式调用...捕获异常 onRejected 回调会在Promise执行异常或者抛出的异常时触发, 捕获异常有两种方式,第一种, then(成功处理的回调函数, 异常处理的回调函数) 在then方法中传递两个回调函数...'/json1.json').then(ret => { console.log(ret) }).catch(err => { // 这里能捕获之前的所有Promise的异常 }) // 传递...并且可以调用回调传递参数,这种有then方法的对象实现了一个thenable的接口,支持这种对象的原因是因为原生Promise还没有被普及之前,很多时候都是第三方的库实现的Promise Promise.resolve...Promise、MutationObserver 和nodejs 中的process.nextTick会作为微任务在本轮调用的末尾执行
01 - AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。...这里提示一下大家, 在html页面使用ajax需要在web服务器环境下运行, 一般向自己的web服务器发送ajax请求。...AJAX的使用 jquery将它封装成了一个方法$.ajax(),我们可以直接用这个方法来执行ajax请求。...error 设置请求失败后的回调函数 async 设置是否异步,默认值是'true',表示异步,一般不用写 同步和异步说明 同步是一个ajax请求完成另外一个才可以请求,需要等待上一个...ajax 是发送http请求获取后台服务器数据的技术 ajax的简写方式可以使用.get和.post方法来完成 知识点回顾 本节介绍了ajax的基本使用方式,jquery基础知识已经讲完
函数 描述 jQuery.ajax() 执行异步 HTTP (Ajax) 请求。 .ajaxComplete() 当 Ajax 请求完成时注册要调用的处理程序。这是一个 Ajax 事件。....ajaxError() 当 Ajax 请求完成且出现错误时注册要调用的处理程序。这是一个 Ajax 事件。 .ajaxSend() 在 Ajax 请求发送之前显示一条消息。....ajaxStop() 当所有 Ajax 请求完成时注册要调用的处理程序。这是一个 Ajax 事件。 .ajaxSuccess() 当 Ajax 请求成功完成时显示一条消息。...请求成功时可调用回调函数,如果需要在出错时执行函数,请使用 $.ajax。 示例代码: $.get("....callback (Function) :(可选) 成功载入后回调函数。 jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。
ajaxError() 请求错误 .ajaxComplete() 请求完成 .ajaxStop() 请求结束(在 .ajaxComplete()后) 3....Deferred Deferred对象是在jQuery1.5中引入的回调管理对象。其作用是把一堆函数按顺序放入一个调用链,然后根据状态来依次调用这些函数。AJAX的所有操作都是使用它来进行封装的。...当我们需要完成,像“请求A和请求B都完成时,执行函数”之类的需求时,使用 $.when()就可以了。...当有回调函数返回 false时终止调用链的执行 CallbackS的控制方法: callbacks.add() 添加一个或一串回调函数 callbacks.fire() 激发回调 callbacks.remove...() 从调用链中移除指定的函数 callbacks.empty() 清空调用链 callbacks.disable() 关闭调用链的继续执行,新添加的函数也不会被执行 callbacks.lock()
注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。...使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。...beforeSend 在发送请求之前调用,并且传入一个 XMLHttpRequest 作为参数。 error 在请求出错时调用。...如果指定为 html 类型,任何内嵌的 JavaScript 都会在 HTML 作为一个字符串返回之前执行。...Ajax 的第一个字母是 asynchronous 的开头字母,这意味着所有的操作都是并行的,完成的顺序没有前后关系。
api=jquery // 注意:在JS代码中,为保证 JS代码能够正常运行,需要在HTML代码加载完毕后,再执行JS代码。...beforeSend:在发送请求之前调用,并且传入一个XMLHttpRequest作为参数。 error:请求在出错时调用。...success:当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。 complete:当请求完成之后调用这个函数,无论成功或失败。...async:默认为true,所有请求均为异步请求。当设置为false时,同步请求将锁住浏览器,其他操作必须等待请求完成之后。...事件 (1)ajaxComplete(callback) AJAX请求完成时,执行函数。
什么promise模式 先看一个场景 A 中执行了ajax请求,在回调函数中调用了B,B 中又是一个ajax请求 这种代码方式会有问题 (1)可读性太差 当嵌套层数过多时,会非常痛苦 (2)用户体验很不好...因为代码到等到每一层的ajax请求都完成后才继续执行 如果调用方式变成这样,是不是感觉更好 new Promise(A).done(B); 这就是Promise模式的使用方式,相当于告诉A:...执行完成后调用B,在A没有完成之前,代码继续往下执行 Promise是CommonJS的规范之一,能够帮助我们控制代码的流程,避免函数的多层嵌套 通过非阻塞的逻辑方式编写代码,并异步执行,而不是直接将回调传递给函数...promise模式有3种状态: (1)unfulfilled(未完成/执行中) (2)resolved(成功完成) (2)rejected(拒绝/失败) promise模式如何使用 (1)...{ alert("err"); }); deferred 还允许添加多个回调函数,按照添加顺序执行 $.ajax("/test") .done(function(){ alert("ok");} )
即事先规定,一旦它们运行结束,应该调用哪些函数。 但是,在回调函数方面,jQuery的功能非常弱。为了改变这一点,jQuery开发团队就设计了deferred对象。...五、普通操作的回调函数接口(上) deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。...其次,当操作完成后,必须手动改变Deferred对象的执行状态,否则回调函数无法触发。...dtd.resolve()的作用,就是将dtd的执行状态从"未完成"变成"已完成",从而触发done()方法。 最后别忘了,修改完wait之后,调用的时候就必须直接传入dtd参数。 ...; }); (运行代码示例6) jQuery规定,$.Deferred()可以接受一个函数作为参数,该函数将在$.Deferred()返回结果之前执行。
这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码: $.get("....其实应该为客户端请求的类型(JSON,XML,等等) 这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。...callback (Function) : (可选) 成功载入后回调函数。 jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。...使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。...complete Function 请求完成后回调函数 (请求成功或失败时均调用)。参数: XMLHttpRequest 对象,成功信息字符串。
在项目开发过程中,过滤器或者拦截器几乎是必用的,他可以很方便的完成类似日志处理、token验证等一系列操作,区别于业务接口,独立进行处理,感觉就是一种Aop思想。...,类似ajax请求的success。...服务器卸载Filter对象之前被调用,该方法用于释放被Filter对象打开的资源,例如关闭数据库和I/O流 @Override public void destroy() {...跟第二节一样,再整一个自定义过滤器。...服务器卸载Filter对象之前被调用,该方法用于释放被Filter对象打开的资源,例如关闭数据库和I/O流 @Override public void destroy() {
(这个回调函数肯定是在当前js执行完后才执行) 3.阻塞与非阻塞 阻塞和非阻塞关注的是:程序在等待调用结果时的状态. 阻塞调用:调用结果返回之前,当前线程被挂起。调用线程只有在得到结果后才会返回。...非阻塞调用:在不能立刻得到结果之前,该调用不会阻塞当前线程。 4.为什么JavaScript是单线程? JavaScript是单线程,程序按照顺序排列,前面的必须处理好,后面的才会执行。...例如ajax异步请求是由JS执行线程和异步http请求线程,事件触发线程共同完成的。 6.事件循环机制(Event Loop) 6.1:栈 函数调用形成一个栈帧。...这里的完成任务是指完成操作(click、mouse、touch,ajax的数据完全请求回来......)...3、在未来的某一时刻,当数据完全请求回来以后,事件触发线程监视到之前发起的HTTP请求已完成,会将指定的回调函数放入任务队列中。