首页
学习
活动
专区
工具
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时调用。其中,第二个函数是可选的,不一定要提供。

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

    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对象触发了失败状态

    12900

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

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

    3.8K32

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

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

    1.8K20

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

    22010

    详细解读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.9K100

    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。

    56910

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

    90030

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

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

    50330

    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
    领券