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

前后端交互的弯弯绕绕

执行异步任务-并传递结果 // 成功调用: resolve(值) 触发 then() 执行 // 失败调用: reject(值) 触发 catch() 执行})// 3....():添加处理程序来处理Promise的兑现或拒绝catch():添加一个拒绝(操作失败)的回调函数,并返回一个Promisefinally():添加一个事件处理器,无论Promise对象最后的状态如何都会被调用...,我们可以通过then()方法或catch()方法设置的回调函数来处理这个错误; 但是如果程序上的错误,得通过catch()去拿到失败消息,在then()中是获取不了的; //then 支持多参数,...) { return new Promise((resolve, reject) => { // XHR 请求 // 调用成功/失败的处理程序 })}myAxios({ url: '目标资源地址...调用成功/失败的处理程序 if (xhr.status >= 200 && xhr.status < 300) { resolve(JSON.parse

69520

jQuery的deferred对象详解

这个功能很重要,未来将成为jQuery的核心方法,它彻底改变了如何在jQuery中使用ajax。为了实现它,jQuery的全部ajax代码都被改写了。...五、普通操作的回调函数接口(上) deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。...前面部分的ajax操作时,deferred对象会根据返回结果,自动改变自身的执行状态;但是,在wait()函数中,这个执行状态必须由程序员手动指定。...类似的,还存在一个deferred.reject()方法,作用是将dtd对象的执行状态从"未完成"改为"已失败",从而触发fail()方法。   ...(6)deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。

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

    JavaScript 如何用回调实现异步操作

    回调函数通常用于处理耗时的操作,如读取文件、网络请求或数据库查询。...这里我们探讨几种常见的异步操作场景,并详细说明回调函数是如何在这些场景中运作的。1. 网络请求(AJAX)在 Web 开发中,通过 AJAX 进行异步网络请求是非常常见的场景。...一个 Promise 实例代表一个异步操作的最终完成(或失败)及其结果值。通过使用 then 方法,可以将多个异步操作串联起来,从而避免嵌套回调。...回调函数在许多场景中得到了广泛的应用,如网络请求、事件处理和定时器操作。...尽管回调函数有其局限性,特别是在处理复杂的异步操作时容易导致回调地狱,但通过合理的设计和使用现代的异步处理方式如 Promise 和 async/await,我们可以有效地避免这些问题并编写出简洁、可维护的异步代码

    46210

    读Zepto源码之Ajax模块

    读 Zepto 源码系列文章已经放到了github上,欢迎star: reading-zepto 源码版本 本文阅读的源码为 zepto1.2.0 ajax的事件触发顺序 zepto 针对 ajax 的发送过程...ajax 请求时触发 ajaxSuccess / ajaxError : 请求成功/失败时触发 ajaxComplete: 请求完成(无论成功还是失败)时触发 ajaxStop: 请求完成后触发,这个事件在...ajax 事件,默认为 true; context: 执行回调时(如 jsonpCallbak)时的上下文环境,默认为 window。...triggerGlobal 内部调用的是 triggerAndReturn 方法,如果有指定上下文对象,则在指定的上下文对象上触发,否则在 document 上触发。...xhr 对象只有 abort 方法,如果存在 deferred 对象,则调用 promise 方法在 xhr 对象的基础上生成一个 promise 对象。

    3.8K00

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

    接着我们通过一个简单的例子来看看ajax的强大(为了方便调用接口我们直接使用网上链接https://cnodejs.org/api),为了观看效果明显一些会使用点击事件让大家看看触发结果 Ajax现代浏览器均支持...promise有三种状态:pendding ,fulfilled,rejected pendding: 初始状态,不成功,不失败, fulfilled:操作成功 rejected:操作失败 当promise...状态发生改变,就会触发then()里的响应函数处理后续步骤;当promise状态一经改变,不会再变。...) onclick 是浏览器内核的 DOM Binding 模块来处理的,当事件触发的时候,回调函数会立即添加到任务队列中。...setTimeout 是浏览器内核的 timer 模块进行的延时处理,当时间到达后才会回调添加到任务队列中。 Ajax 是浏览器内核 network 模块在网络请求完成之后,将回调添加到任务队列中。

    55430

    Promise、Generator、Async 合集

    异步解决方案的发展历程1.回调函数从早期的Javascript代码来看,在ES6诞生之前,基本上所有的异步处理都是基于回调函数函数实现的,你们可能会见过下面这种代码:ajax('aaa', () =>...,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。...这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态...,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。...Promise.reject(reason) 返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法Promise.resolve(value) 返回一个状态由给定value

    24400

    33·灵魂前端工程师养成-异步与promise

    # 在中文中「回头」也有「将来」的意思,如:「我回头请你吃饭」 ---- 异步和回调的关系 ## 关联 # 异步任务需要在得到结果时通知JS来拿结果 # 怎么通知呢?...}) 方法二:搞两个回调呗 ajax('GET','/1.json',data()=>{},error()=>{}) //前面函数是成功回调,后面函数是失败回调 ajax('GET','/1.json...1.规范回调的名字或顺序 2.拒绝回调地狱,让代码可读性更强 3.很方便的捕获错误 ---- 前端程序猿开始翻书了 1976年,Daniel P.Friedman 和 David Wise。...因为之前我们说的那三个原因,不规范、回调地狱、很难错误处理。...任务成功则调用resolve(result) 任务失败则调用reject(error) 第二步: 使用.then(success,fail)传入成功和失败函数 点到为止: Promise先介绍到这里

    1.1K30

    全面分析前端的网络请求方式

    四、Ajax的出现解决了什么问题 在 Ajax出现之前, web程序是这样工作的: ?...异常处理 onerror xhr.onerror = callback; 当 ajax资源加载失败时会触发 callback。...异常处理 ? 可以发现,调用 reject有三种可能: 1.请求超时 2.请求失败 注意:当和服务器建立简介,并收到服务器的异常状态码如 404、500等并不能触发 onerror。...当网络故障时或请求被阻止时,才会标记为 reject,如跨域、 url不存在,网络异常等会触发 onerror。 所以使用fetch当接收到异常状态码都是会进入then而不是catch。...可见在构造函数中主要对 options中的 status、statusText、headers、url等分别做了处理并挂载到 Response对象上。

    2.2K40

    JavaScript的异步编程之Promise

    当等待状态改编程成功或者失败之后就再也不能再被改变了,成功的时候触发onFulfilled 回调,失败的时候触发onRejected 回调 Promise 简单使用 new Promise 传入一个回调函数...捕获异常 onRejected 回调会在Promise执行异常或者抛出的异常时触发, 捕获异常有两种方式,第一种, then(成功处理的回调函数, 异常处理的回调函数) 在then方法中传递两个回调函数...,第二种用.catch 方法去捕获异常,catch方法其实就是then方法的别名,相当于then方法第一个参数传undefined // then(成功处理的回调函数, 异常处理的回调函数) ajax(...如果数组中有一个Promise失败的结束了,那么Promise.all返回的Promise对象也会以失败的结束 Promise.all([ ajax('/url1'), ajax('/url2'...与 Promise.race方法一样也是接收一个数组,这些元素都是一个Promise对象,这个方法会返回一个全新的Promise对象,不同的是只要有一个Promise执行是成功的就算成功,只有全部都失败了才会失败

    76270

    两年经验前端带你重学前端框架必会的ajax+node.js+webpack+git等技术 第三章

    progress:在数据传输期间周期性地触发,表示数据正在传输。 loadstart:在请求开始时触发。 abort:如果请求被取消时触发。 error:如果请求失败时触发(例如,网络错误)。...load:在成功接收到响应数据时触发。 timeout:如果请求超时时触发。 loadend:在请求完成时触发,无论请求是成功还是失败。...在表面的查询参数 需求 其他的步骤没有什么区别,只是在参数拼接的时候,需要使用浏览器内置对象 带参数的请求 Promise 基础使用 这个promise,用来管理请求成功或失败后要做什么 如果你不知道什么是异常...,那可以这么想:异常就是停止程序的断点,那么,抛出异常理所应当为开发者觉得要在这里停止运行代码。...在本例中,这里就是抛出一个错误 Promise三种状态 因为无法改变,所以会是resolve的以兑现状态 小案例 Promise和XML都没有自己来判断请求是成功还是失败的能力,因此,只需要将Promise

    5100

    Promise对象

    Promise对象 JavaScript是单线程的语言,通过维护执行栈与任务队列而实现了异步操作,setTimeout与Ajax就是典型的异步操作,Promise就是异步操作的一个解决方案,用于表示一个异步操作的最终完成或失败...对象失败则立即触发该promise对象的失败。...这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态...,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。...(reason) 返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法 var promise = Promise.reject("err"); promise.then(()

    66610

    Ajax 之战:XMLHttpRequest 与 Fetch API

    Jesse James Garrett 在他 2005 年的文章《AJAX: Web 应用程序的新方法》中提出了“AJAX”概念,那时谷歌邮箱和谷歌地图等基于 AJAX 的应用程序已经存在,但是这个术语激励了开发人员...开源会话重播 OpenReplay 是 FullStory 和 LogRocket 的开源替代品,它通过回放用户在你的应用程序上的一切操作,并显示每个问题的操作堆栈,提供完整的可观察性。...进度支持 我们可以监控请求的进度,通过将一个处理程序附加到 XMLHttpRequest 对象的进度事件上。...超时支持 XMLHttpRequest 对象提供了一个 timeout 属性,可以将其设置为请求自动终止前允许运行的毫秒数;如果超时,就触发一个 timeout 事件来处理: const xhr =...更显式的故障检测 当开发人员第一次使用 fetch() 时,假设一个 HTTP 错误,如 404 Not Found 或 500 Internal Server error 将触发 Promise 拒绝并运行相关的

    2.7K20

    你真的知道ajax的全部吗?

    五、普通操作的回调函数接口(上) deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。...首先,最后一行不能直接返回dtd,必须返回dtd.promise()。原因是jQuery规定,任意一个deferred对象有三种执行状态----未完成,已完成和已失败。...dtd.promise()的目的,就是保证目前的执行状态----也就是"未完成"----不变,从而确保只有操作完成后,才会触发回调函数。...(2)deferred.done()指定操作成功时的回调函数   (3)deferred.fail()指定操作失败时的回调函数   (4)deferred.promise()没有参数时,作用为保持deferred...(8)deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。

    1.1K70

    jQuery的deferred对象详解

    ; }); (运行代码示例4) 这段代码的意思是,先执行两个操作$.ajax(“test1.html”)和$.ajax(“test2.html”),如果都成功了,就运行done()指定的回调函数;如果有一个失败或都失败了...五、普通操作的回调函数接口(上) deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。...前面部分的ajax操作时,deferred对象会根据返回结果,自动改变自身的执行状态;但是,在wait()函数中,这个执行状态必须由程序员手动指定。...类似的,还存在一个deferred.reject()方法,作用是将dtd对象的执行状态从”未完成”改为”已失败”,从而触发fail()方法。   ...(6)deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为”已失败”,从而立即触发fail()方法。

    73720

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

    Promise对象方法 对于DOM,动画,ajax相关方法,都可以使用 promise 方法。调用 promise 方法,返回的是 promise 对象。可以链式调用 promise 方法。...比如jquery中的ajax的 $.post $.get $.ajax 等方法,实际上都是默认调用了promise方法,然后返回了一个promise对象 promise对象常见的方法有三个 : done...done 的回调执行, reject 会触发 fail 的回调,对于 always 方法,deferred 对象,无论是 resolve 还是 reject ,都会触发该方法的回调。...特点: 有三种状态:Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejected(已失败)。 一旦状态改变,就不会再变,任何时候都可以得到这个结果。...); }); } timeout(100).then((value) => { console.log(value); }); 异常处理   异常处理一直是回调的难题,而promise提供了非常方便的

    57620

    JavaScript Promise

    事实上,Promise规范没有要求这样做,你甚至可以不做任何的处理(即不传入then的第二个参数)或者统一处理。...,同一个promise的then可以调用多次,并且回调的执行顺序跟它们被定义时的顺序一致 then方法接受两个参数,第一个参数是成功时的回调,在promise由“等待”态转换到“完成”态时调用,另一个是失败时的回调...对then的各种参数的处理是最复杂的部分,有兴趣的同学可以参看其他类Promise库的实现。...这时候,可以对Promise进行各种扩展,比如实现Promise.all(),接受promises队列并等待他们完成再继续,再比如Promise.any(),promises队列中有任何一个处于完成态时即触发下一步操作...();   };   当然,jQuery中,很多的操作都返回的是Deferred或promise,如animate、ajax: [js] view plaincopy // animate $(

    1.3K20
    领券