promise、resolve、reject、拦截响应
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
使用promise机制的优点如下:
1.可以对函数进行链式调用,所以你不会陷入代码缩进噩梦中;
2.在调用链的过程中,可以保证上一个函数调用完成之后才会调用下一个函数;
3.每一个then()调用都带有两个参数(两个都是函数)。第一个是成功之后的回调,第二个是出错之后的处理器;
4.如果调用链中出现了错误,错误将会被冒泡传递到其余的错误处理函数中。所以,最终来说,所有错误都可以在任意一个回调函数中进行处理。
你可能会问,resolve(解决)方法和reject(拒绝)方法又是什么呢?在AngularJS中,延迟调用是实现promise的一种方式。调用resolve方法将会填充promise(也就是调用success处理函数),而调用reject方法将会调用promise的错误处理函数。
Promise接口是AngularJS组织API的基础,从根本上讲,Promise接口从以下方面对异步请求做了规范:
a.异步请求返回一个promise,而不是返回具体值;
b.Promise带有一个then函数,这个函数有两个参数:第一个参数是处理"resolved"和"sucess"事件的函数;第二个参数是处理"rejected"和"failure"事件的函数。调用这两个函数时将会把结果或者拒绝的原因作为参数传递进去;
c.只要返回结果是合法的,接口就可以保证这两个函数中的一个会被调用。
大多数deferred/Q实现都会遵守以上方式,但是AngularJS的实现比较特殊,原因如下:
a.AngularJS知道$q的存在,所以$q会被整合到作用域模型中去。这样可以使解析时的传递速度更快,并且可以减少UI的闪烁和刷新;
b.AngularJS的模板也认识$q,这样一来,接口的内容就可以被当作最终结果值(而不是当作promise)来对待,然后等获取结果之后再通知promise;
c.体积更小,因为对于常用的异步任务来说,AngularJS只实现了它们所需要的最基本、最重要的功能。
Promise机制还可以做一些非常酷的事情:拦截响应。
我们已经学过的内容有:向服务端发送请求、处理响应、把响应很好地包装成抽象的东西及处理异步调用。但是在真实的应用中,对于每一次服务端调用,最终还必须做一些通用的操作,例如错误处理、鉴权以及其他安全方面的处理(例如剪裁数据)。
在深入理解了$q接口之后,我们就可以使用拦截响应的方式来处理以上所有任务了。响应拦截的机制允许我们在响应到达应用之前对其进行拦截,并在上面进行一些操作,例如转换数据形式、处理错误等所有你能想到的操作。
promise、resolve、reject、拦截响应的更多相关文章
- Promise(resolve,reject)的基本使用
什么是Promise? Promise是一个构造函数,其原型上有 then.catch方法,还有reslove,reject等静态方法.通过创建Promise实例,可以调用Promise.protot ...
- ES6中的Promise.resolve()的作用
var foo = { then: (resolve, reject) => resolve('foo') }; var resolved = Promise.resolve(foo); 相当于 ...
- [js高手之路] es6系列教程 - promise常见用法详解(resolve,reject,catch,then,all,race)
关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下pro ...
- es6中promise ALL Race Resolve Reject finish的实现
function mypromise(func){ this.statue = "pending"; this.data = null; this.resolveCallback ...
- Promise.resolve( data)与Promise.reject( data )
Promise.resolve( data)与Promise.reject( data ) 常用来生成已经决议失败或成功的promise实例: 1.Promise.reject(data)不管传递的是 ...
- vue中 请求拦截 响应拦截设置
第一,在项目的src中新建http.js文件,将以下代码复制进去 import axios from 'axios' import { Message, Loading } from 'element ...
- AngularJS进阶(三十六)AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记)
AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记) 前言 在"AngularJS项目开发技巧之图片预加载" ...
- Promise.resolve解析
总结自:https://blog.csdn.net/lq15310444798/article/details/81275278 Promise.resolve返回一个Promise实例 参数分4种情 ...
- [转载]es6 Promise.resolve()方法
es6 Promise.resolve()方法 2018-01-27 22:29:06 ixygj197875 阅读数 16925更多 分类专栏: ES6标准入门 (阮一峰) ES6标准入门 Pr ...
随机推荐
- java实现MsOffice文档向pdf文档转化
本篇文档实现功能,将word和ppt文档的文件转化成pdf格式的文档 应用到jacob 第一步:下载压缩包 (1)jacob官网下载jacob压缩包 (2)网址:http://sourceforge. ...
- 10件在PHP7中不要做的事情
10件在PHP7中不要做的事情 1. 不要使用mysql_函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数.PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mys ...
- .NET委托解析(异步委托)
上一篇我们了解到了,委托的基本感念,列举了几个委托的实例,并根据实例来反编译源码查看.NET 委托的内部实现,从浅入深的角度来详细的去解析委托的实质,本文将系上篇继续讨论异步委托的实现以及异步委托的源 ...
- 【linux】用户与组
一.用户和组的基本概念 1.用户 用户:用于获取计算机资源或服务的标识符,比如用户名.计算机处理的是UID, ...
- 小米开源监控open-falcon
小米开源监控系统Open-Falcon安装使用笔记 07net01.com 发布于 2016-10-25 18:42:03 分类:IT技术 阅读(88) 评论 前言 近期爆出Zabbix有严重bug, ...
- MySQL建表规范与常见问题 (go)
一. 表设计 库名.表名.字段名必须使用小写字母,“_”分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用InnoDB存储引擎. 存储精确 ...
- android中的一个圆角图片
RoundedImageView A fast ImageView (and Drawable) that supports rounded corners (and ovals or circles ...
- 获取文件夹总大小方法2_获取cmd命令结果,效率最高
public static long GetDirectorySize(string path) { long res = 0; System.Diagnostics.Process p = new ...
- Django之路 - 实现登录随机验证码
登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验 ...
- nginx正向代理访问百度地图API
正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代 ...