首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解JS异步编程三(promise)

比如jquery中的ajax的 $.post $.get $.ajax 等方法,实际上都是默认调用了promise方法,然后返回了一个promise对象 promise对象常见的方法有三个 : done...done 的执行, reject 会触发 fail 的,对于 always 方法,deferred 对象,无论是 resolve 还是 reject ,都会触发该方法的。...一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:Pending变为Resolved和Pending变为Rejected。...(value); } else { reject(error); } }); then方法 then方法可以接受两个函数作为参数。...第一个函数是Promise对象的状态变为Resolved时调用,第二个函数是Promise对象的状态变为Reject时调用。其中,第二个函数是可选的,不一定要提供。

49820
您找到你想要的搜索结果了吗?
是的
没有找到

Promise、Generator、Async 合集

异步解决方案的发展历程1.函数从早期的Javascript代码来看,在ES6诞生之前,基本上所有的异步处理都是基于函数函数实现的,你们可能会见过下面这种代码:ajax('aaa', () =>...所以上面那种函数的方式我们可以改成这样:(前提是ajax已用Promise包装)ajax('aaa').then(res=>{ return ajax('bbb')}).then(res=>{...return ajax('ccc')})通过使用Promise来处理异步,比以往的函数看起来更加清晰了,解决了地狱的问题,Promise的then的链式调用更能让人接受,也符合我们同步的思想。...fulfilled状态能够触发thenrejected状态能够触发catch执行async函数,返回的是Promise对象await相当于Promise的then并且同一作用域下await下面的内容全部作为...这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态

10300

web前端面试都问什么-JS篇

闭包的应用场景 在开发中, 其实我们随处可见闭包的身影, 大部分前端 JavaScript 代码都是“事件驱动”的,即一个事件绑定的方法; 发送ajax请求成功|失败的;setTimeout的延时...js的防抖和节流是什么 防抖: 在事件被触发n秒再执行,如果在这n秒内又被触发,则重新计时。 使用场景: 给按钮加函数防抖防止表单多次提交。...,都会保证在规定时间内一定会执行一次真正的事件处理函数,而函数防抖只是在最后一次事件触发一次函数。...resolve函数的作用是,将Promise对象的状态“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是...它的作用是为 Promise 实例添加状态改变时的函数。then方法的第一个参数是resolved状态的函数,第二个参数(可选)是rejected状态的函数。

3.7K32

前端数据获取之Ajax与Fetch (一)

宏观上只要记住异步javascript就是不影响当前页面动作的一段javascript代码,这段代码会立flag,并且有一一个函数会在将来某个时刻执行。...,钩子函数得到执行,你传入的也得到执行。...当实例化成功时,readyState为0,实例执行open方法,readyState为1,这两个均为同步操作内容,请求尚未发送。 当实例的send方法执行,请求发送。...发送的请求被接受,xhr引擎触发onreadystatechange,readyState为2;发送的请求被处理,xhr引擎触发onreadystatechange,readyState为3;发送的请求处理完成返回...AJAX的内容,本期先介绍这么多,下一期介绍一下ES6新的数据请求方式Fetch。 如上内容均为自己总结,难免会有错误或者认识偏差,如有问题,希望大家留言指正,以免误人。

1.7K20

详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()

一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表(是可选的,也可以将要传的参数写在url里面),callback为请求成功函数,该函数接受两个参数...jQuery 1.2 新功能,设置为 false 将不会浏览器缓存中加载请求信息。...complete Function 请求完成函数 (请求成功或失败时均调用)。 参数: XMLHttpRequest 对象,成功信息字符串。...success Function 请求成功函数。...你无法同时执行success和error两个函数 ajaxError 全局事件全局的发生错误时触发 complete (局部事件) 不管你请求成功还是失败,即便是同步请求,你都能在请求完成时触发这个事件

3.4K100

JavaScript——异步进阶

event loop,也叫事件循环/事件轮询,JS是单线程运行的,从前到,一行一行执行,如果某一行执行报错,则停止下面的代码执行,先把同步代码执行完,再执行异步,异步要基于调来实现,event loop...的内容;将定时器放到Web APIs中,到时间将回函数放到函数队列中执行完了setTimeout, 清空调用栈console.log("Bye")进入调用栈,执行,调用栈清空同步代码被执行完,,...(成功状态)、rejected(失败状态)pending ->resolved 或 pending->rejected变化不可逆状态的表现pending状态,不会触发then和catchresolved...状态,会触发后续的then函数rejected状态,会触发后续的catch函数reslove只会触发then的不会触发catchreject只会触发catch的不会触发thenPromise...微任务是ES6语法规定的,宏任务是浏览器规定的。

19010

Promise对象

Promise对象只有pending变为fulfilled和pending变为rejected的状态改变。只要处于fulfilled和rejected,状态就不会再变了。...缺点:无法取消Promise,一旦新建它就会立即执行,无法中途取消;如果不设置函数,Promise内部抛出的错误,不会反应到外部;当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成...promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise...这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态...会在当前promise运行完毕被调用,无论当前promise的状态是完成fulfilled还是失败rejected。

54710

《深入浅出Node.js》:Node异步编程解决方案 之 ES6 Promise

Promise/Deferred模式直接促使JQuery 1.5版本的ajax重写,使得ajax调用中即使不调用success()、error()等方法,ajax也能执行,这样的调用方式比预先传入调用起来更舒服...一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的改变,只有两种可能:pending到fulfilled、pending到rejected。...只要这两种状态之一发生了,状态就凝固,不会再改变,会一直保持这个结果。 通过Promise对象,可以把异步操作以同步操作的流程表达出来,避免层层嵌套的函数。...注意Promise对象一旦新建就会立即执行,并且无法中途取消;并且如果不设置函数,Promise内部抛出的错误,也不会反应到外部;当处于pending状态时,无法得知目前进展到哪一阶段(刚开始还是即将完成...然后,then方法指定的函数,将在当前脚本所有同步任务执行完才会执行,所以resolved最后输出。 then方法可以接受两个函数作为参数。

87430

特皮技术团队:一年经验菜鸟前端眼中的异步编程

异步编程:每一个任务有一个或多个函数,前一个任务执行完,不是执行下一个任务,而是执行函数,一个任务是不等前一个任务结束就执行的,所以程序的执行顺序与任务的排列顺序是不一致的。...状态发生改变,就会触发then()里的响应函数处理后续步骤;当promise状态一经改变,不会再变。...的新增的任务队列 是在事件循环之上的(onclick, setTimeout,Ajax) onclick 是浏览器内核的 DOM Binding 模块来处理的,当事件触发的时候,函数会立即添加到任务队列中...setTimeout 是浏览器内核的 timer 模块进行的延时处理,当时间到达才会添加到任务队列中。 Ajax 是浏览器内核 network 模块在网络请求完成之后,将回添加到任务队列中。...,在我们想要启动异步任务前就必须指定好成功、失败的函数,而且我们不能在它完成在指定函数,等他执行完毕已经获取不到数据了; 而 promise是通过执行一个函数,这个函数返回一个promise对象

47730

jQuery封装的AJAX使用

设置为false将不会浏览器缓存中加载请求信息。 data: 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。...,JQuery将自动替换一个“?”为正确的函数名,以执行函数。 text:返回纯文本字符串。...function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 } complete:要求为Function类型的参数,请求完成调用的函数(请求成功或失败时均调用...function(XMLHttpRequest, textStatus){ this; //调用本次ajax请求时传递的options参数 } success:要求为Function类型的参数,请求成功调用的函数...设置为false将不会触发全局ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。 ifModified:要求为Boolean类型的参数,默认为false。

2.9K60

Ajax向服务器端发送请求

Ajax是一种异步进程,程序不会等待异步代码执行完再继续执行后续代码 当后续代码需要调用Ajax返回的数据时,可能会有数据未返回的问题 Ajax的实现步骤 创建Ajax对象 var xhr =...4 响应已经完成,可以获取并使用服务器响应了 xhr.readyState;//获取Ajax状态值 onreadstatechange事件 Ajax状态码发生变化的时候触发 // 当Ajax状态码发生变化时触发事件...json对象 responseText = JSON.parse(responseText); } // 如果请求成功 if (xhr.status == 200) { // 调用成功函数..., 并且将服务器端返回的结果传递给成功函数 defaults.success(responseText, xhr); } else { // 调用失败函数并且将xhr对象传递给函数...xhr对象传递给函数 defaults.error(xhr); } }

2.2K20
领券