笔记:Promise的使用

2018-11-11  本文已影响0人  ChaliceLee92

ES5的回调地狱问题:

大家都知道,ES5里面我们处理异步请求的时候会通过callback回调函数来解决异步非阻塞的情况,所谓的异步非阻塞个人理解为,当你发送一个请求的时候,我也不知道它什么时候会给我返回一个值,就比如去饭店吃饭,服务员下单给厨师,但是服务员并不知道厨师什么时候能够做好你点的菜是一个原理,我们模拟数据请求,查看下这个执行顺序

我们可以看到执行的结果并不是我们想要的执行结果,我们再来改造一下我们的代码

我们给ajax这个函数传入了一个fn形参,然后在异步请求的函数体内部调用这个函数,在我们调用这个ajax函数的时候给它传入一个回调函数,查看下它的执行结果

我们理解回调最难的地方就是理解程序的运行顺序,上面这种金字塔 , 感觉是不是特别难受

ES6中 , 下面我们看看Promise:

Promise是异步编程的一种方案, 它由社区最早提出和实现,ES6语法将其写进了语言标准,统一了语法,提供了原生的Promise

所谓Promise我个人理解为一个容器,里面保存着未来才会结束的事情(通常是一个异步操作)的结果,从语法上,Promise其实就是一个大对象,从它可以获取到异步操作的消息

Promise对象的状态不受外部影响 

三种状态: pending:进行中 ; fulfilled :已经成功 ; rejected 已经失败

状态改变:Promise对象的状态改变,只有两种可能:

1.从pending变为fulfilled

2.从pending变为rejected。

这两种情况只要发生,状态就凝固了,不会再变了,这时就称为resolved(已定型)

ES6规定,Promise对象是一个构造函数,用来生成Promise实例


.then(onCompleted , onRejected)有两个参数,第一个参数是当承诺完成成功的时候的状态(返回一个值),第二个参数是当承诺完成是失败的状态 (返回一个原因), 就是当你需要对承诺完成的数据进行一个判断一样

.catch() 这个是错误处理函数, 当承诺被拒绝的时候触发

我们可以通过console.dir 打印看看Promis这个对象里面的都有什么属性

我们在点开看看它的原型上面的属性

可以看到then方法和catch方法都在它的原型链上面, 原型链上的方法是可以继承的,所以我们上面的代码可以链式编程就是这个原因

上一篇下一篇

猜你喜欢

热点阅读