博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
promise、resolve、reject、拦截响应
阅读量:5909 次
发布时间:2019-06-19

本文共 1224 字,大约阅读时间需要 4 分钟。

Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。

使用promise机制的优点如下:

1.可以对函数进行链式调用,所以你不会陷入代码缩进噩梦中;

2.在调用链的过程中,可以保证上一个函数调用完成之后才会调用下一个函数;

3.每一个then()调用都带有两个参数(两个都是函数)。第一个是成功之后的回调,第二个是出错之后的处理器;

4.如果调用链中出现了错误,错误将会被冒泡传递到其余的错误处理函数中。所以,最终来说,所有错误都可以在任意一个回调函数中进行处理。

        你可能会问,resolve(解决)方法和reject(拒绝)方法又是什么呢?在中,延迟调用是实现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接口之后,我们就可以使用拦截响应的方式来处理以上所有任务了。响应拦截的机制允许我们在响应到达应用之前对其进行拦截,并在上面进行一些操作,例如转换数据形式、处理错误等所有你能想到的操作。

转载于:https://www.cnblogs.com/family-626-77/p/5951683.html

你可能感兴趣的文章
Redis整合Spring结合使用缓存实例
查看>>
拼音类
查看>>
linux内核(kernel)版本号的意义
查看>>
C++大数(正整数)相加相减v1
查看>>
我的友情链接
查看>>
Linux运维--系统安装
查看>>
深入理解atime,ctime,mtime
查看>>
java并发编程
查看>>
linux启动流程图+mysql协议图
查看>>
Linux NFS服务器的安装与配置
查看>>
【MySQL】零碎知识收集
查看>>
Nginx高性能web服务器之安装(二)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
了解11g OCM
查看>>
Robot Framework --rerunfailed 的使用
查看>>
python入门书籍
查看>>
Apache之工作模型
查看>>
安装ESXI5.1
查看>>
RabbitMQ 安装环境 踩过的坑
查看>>