首页
学习
活动
专区
圈层
工具
发布

深入理解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时调用。其中,第二个函数是可选的,不一定要提供。

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

    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状态能够触发then回调rejected状态能够触发catch回调执行async函数,返回的是Promise对象await相当于Promise的then并且同一作用域下await下面的内容全部作为...这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态

    45600

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

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

    4.1K32

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

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

    2.3K20

    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语法规定的,宏任务是浏览器规定的。

    39610

    详细解读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 (局部事件) 不管你请求成功还是失败,即便是同步请求,你都能在请求完成时触发这个事件

    5.3K100

    《深入浅出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方法可以接受两个回调函数作为参数。

    1.1K30

    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。

    80910

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

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

    63030

    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。

    4.1K60

    我的职业是前端工程师【三】:学习前端只需要三个月【语言篇】

    JavaScript 语言的变化 几年间,出现了 CoffeeScript、TypeScript、ClojureScript、Dart、ES6 等等的语言,他们都可以编译为 JavaScript,随后就可以在浏览器上运行...标准化后的 JavaScript 便称为 ECMAScript,JavaScript 的版本也以 ECMAScript 来命名。 ?...你可以使用箭头函数,来减少回调的代码量,并改善作用域 this 的问题。 你可以使用原生的 Promises 来解决地狱式回调的问题。 你还可以在 JavaScript 中使用真正的面向对象编程。...当我们需要在浏览器上运行 ES6 代码时,就需要使用类似于 Babel 这样的转译工具,来将代码转换为 ES5 来在普通浏览器上运行。 ?...与同时期的 ES6 相比,它更加完善,并且更适合于大型应用开发。TypeScript 从其名字来看,就是 Type + Script,它是一个强类型的语言。

    1K90
    领券