Promise
是一门新的技术(ES6规范)
Promise
是JS中进行异步编程的新解决方案Promise
是一个构造函数
Promise
对象用来封装一个异步操作并可以获取其成功或失败的结果值。
Promise
的状态指的是实例对象中的一个属性PromiseState
,它的值有三个:
Promise
的状态改变只有下面的三种情况:
说明:只有这2种,且一个Promise
对象只能改变一次,无论变为成功还是失败,都会有一个结果数据,成功的结果数据一般称为value
,失败的结果数据一般称为reason
。
Promise实例对象中还有一个属性PromiseResult
,保存着对象成功/失败
的结果。要想改变它的值,只有通过给resolve()
或者reject()
方法传参,成功时,将对应数据传入resolve()
方法,失败时,将对应的数据传入reject()
方法,之后可以在then(value
需求:点击按钮,1秒后显示是否中奖(30%概率中奖)。若中奖,弹出:恭喜恭喜,奖品为10万RMB玛莎拉蒂优惠券;若未中奖弹出:再接再厉。
html页面,放个标题和按钮即可:
现在需求变更,在弹出提示时,同时告知本次抽到的数字。
回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调执行的条件
例如,下面的代码是Node.js
的fs
模块读取三个文件,并将读取到的结果进行拼接并且输出到控制台中。
这个代码片段,fs.readFile()
在嵌套调用,这里就形成了回调地狱。
resolve
函数:内部定义成功时我们调用的函数
reject
函数:内部定义失败时我们调用的函数
说明:executor
会在Promise
内部立即同步调用,异步操作在执行器中执行。
说明:指定用于得到成功value
的成功回调和用于得到reason
的失败回调,返回一个新的Promise
对象。
catch()
只能指定失败的回调,不能指定成功的回调。其实也是使用then()
实现的.
说明:返回一个成功/失败的Promise
对象
说明:返回一个失败的Promise
对象
说明:返回一个新的Promise
对象,只有所有的Promise
都成功才成功,只要有一个失败了就直接失败,失败的结果就是失败的Promise
对象的结果。
all()
方法的示例:
说明:该方法返回的结果总是状态为成功的Promise
对象,这个Promise
对象的结果值是包含promises
参数中每一个promise
对象的状态以及结果值的对象数组。
注意和all()
方法的区别。
说明:返回一个新的Promise
对象,第一个完成的Promise
对象的结果状态就是最终的结果状态
改变Promisede
状态有三种方法:
指定回调用的就是then()
,所以这个题目的意思是如果使用then()
方法为一个promise
对象指定多个回调,那么这些回调是否都会执行?
答案是:当Promise
改变为对应状态时都会调用。
then()
方法延迟更长时间才被调用
3. 什么时候才能得到数据?
then()
指定的回调函数执行的结果决定
promise
,此promise
的结果就会成为新promise
的结果
then
的链式调用串连多个同步或异步任务
promise
的then
链式调用时,可以在最后指定失败的回调
当使用promise
的then
链式调用时,想要在中间中断,不再调用后面的回调函数,有且只有一个办法:在回调函数中返回一个pending
状态的promise
对象。
在 Promise 上,有两个函数,分别叫做 resolve(成功之后的回调函数) 和 reject(失败之后的回调函数)
Promise 表示一个 异步操作;每当我们 new 一个 Promise 的实例,这个实例,就表示一个具体的异步操作;
既然 Promise 创建的实例,是一个异步操作,那么,这个 异步操作的结果,只能有两种状态:
状态1: 异步执行成功了,需要在内部调用 成功的回调函数 resolve 把结果返回给调用者;
状态2: 异步执行失败了,需要在内部调用 失败的回调函数 reject 把结果返回给调用者;
由于 Promise 的实例,是一个异步操作,所以,内部拿到 操作的结果后,无法使用 return 把操作的结果返回给调用者; 这时候,只能使用回调函数的形式,来把 成功 或 失败的结果,返回给调用者;
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。