promise是什么意思 promise的用法,小编带你了解更多信息 。
Promise简介
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大 。(摘自),但是对于Promise的创建和执行流程,其实有很多人初学时,容易走入误区 。
今天就以一首歌来带大家学习Promise 。
Promise创建
Promise翻译过来的意思就是”承诺”,其实Promise的创建本质就是一个许下承诺的过程,想到这我的脑海中不由得浮现了一首经典老歌,海鸣威 《你的承诺》 。
歌中相知相恋的两个人,奈何情深缘浅,终于还是分开,许下了“不为彼此难过,过各自的生活”这样的承诺 。但是随后歌曲又以”Oh baby 你答应我的我都记得,但是你却忘了你的承诺,不是说好彼此都不再联络,谁都别再犯错”,暗示承诺的状态发生改变 。
由此不难想象以下两种情况:
- 遵守承诺
文章插图
- 违背承诺
文章插图
同样,JS中的Promise的创建也是许下代码承诺的一种方式,它默认也包含三种状态:
- pending (进行中)
- fulfilled(已成功)
- rejected(已失败)
var p = new Promise(function(){
// 回调函数
})
Promise中接收一个回调函数(简单说就是一个容器),传入某个未来才会结束的事件(通常是一个异步操作)的结果;此时打印,你会得到一个Promise实例(实例化对象),展开之后默认显示:
Promise {}
[[Prototype]]: Promise,
[[PromiseState]]: \\\"pending\\\",
[[PromiseResult]]: undefined,
此时我们会看到
[[PromiseState]]用于存储Promise实例(当前承诺)的状态 ,默认显示pending ;
[[PromiseResult]]用于表示Promise实例中存储的数据 , 默认显示undefined;
[[Prototype]]表示原型 以后再做讲解
但是有人就会问了,既然有三种状态,而默认是pending(进行中)状态,那么我们如何将当前Promise实例的状态改为另外两种:
这就不得不提到Promise的第一特征了:
对象的状态不受外界影响 。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败) 。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态 。
可以理解为,状态并不是自行改变的,而是由异步(同步也可以)的结果决定了. 。
所以Promise在创建过程中,传入的回调函数接收了改变状态的两个方法,resolve,reject作为形式参数传入.
var p = new Promise(function(resolve,reject){//形式参数
// 回调函数
})
resolve() 将Promise实例的状态 由pending(进行中) 改为 fulfilled(已成功)
reject() 将Promise实例的状态 由pending(进行中) 改为rejected(已失败)
而且resolve() reject() 方法在调用时 还可以接收一个参数,作为数据传入,存储到Promise实例中 。
同步代码展示:
var p = new Promise(function(resolve,reject){//形式参数
// 回调函数
resolve(111)
})
console.log(p)
结果:
Promise {: 111}
[[Prototype]]: Promise
[[PromiseState]]: \\\"fulfilled\\\" // 已成功
[[PromiseResult]]: 111 // 存储数据
var p = new Promise(function (resolve, reject) {//形式参数
// 回调函数
reject(222)
})
Promise {: 111}
[[Prototype]]: Promise
[[PromiseState]]: \\\"rejected\\\" // 已失败
[[PromiseResult]]: 222 // 存储数据
Uncaught (in promise) 111 // 报错 (可以不用理会 后面会被then() / catch() 方法捕获)
resolve() 和 reject() 方法,在同步代码中调用,会立即改变Promise实例的状态 。
异步代码展示:
var p = new Promise(function (resolve, reject) {//形式参数
setTimeout(function () {
resolve(111);
console.log(\\\"line 24:\\\", p);
}, 2000)
})
console.log(\\\"line 27:\\\", p);
结果依次为:
line 27: Promise {}
line 24: Promise {: 111}
-------------------------------------两次代码请分开执行-------------------------------------------------
var p = new Promise(function (resolve, reject) {//形式参数
setTimeout(function () {
- 12月是什么星座 十二月份有什么花开放
- 张学友和张家辉到底是什么关系[张学友和黄家驹]
- 正规乒乓球比赛规则详细流程大全 乒乓球的比赛规则是什么
- 企业常用的8中推广方式 互联网网络推广是什么
- 淘宝会员名是淘宝账号吗 淘宝会员名是什么
- 牛西冷是什么部位
- 平板电脑二合一是什么意思
- hrd是什么职位的简称 hrd是什么岗位
- 荧光材料的发光原理是什么 没有光源荧光材料会不会发光
- 101是什么意思 101事件真相知乎