1. promise的含义
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
2. Promise对象有以下两个特点
-
Promise
对象代表一个异步操作,有三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态 -
一旦状态改变,就不会再变,任何时候都可以得到这个结果。
Promise
对象的状态改变,只有两种可能:从pending
变为fulfilled
和从pending
变为rejected
。只要这两种情况发生,状态就凝固了,不会再变了
3 基本用法
// 实例化对象
let p1 = Promise.resolve({
then: (resolve, reject) => {
// promise 有三种状态 正在进行中 执行完毕 执行错误
// (正在进行中 执行完毕)resolve
// reject(抛出异常)
// 这两种状态是无法更改的,二者只能一个,是相斥的
// 他是成功的 他只会输出成功的结果 并不会返回失败的结果
// 同上,请求失败也不会返回成功的结果 只会返回错误的信息
// 总结 成功和失败只会出现一个
// 成功用then 接收 失败用catch 接收
// 用then 接收 给resolve 赋值
// 用catch 接收 给reject 赋值
resolve(42)
reject(1123)
}
})
p1.then(function (value) {
console.log(value) // 42
}).catch(run => {
console.log('catch', run)
})
异步加载的例子
const p1 = new Promise((resolve, reject) => {
// 生成一个随机数
// random 生成一个 0-1之间 的随机数
setTimeout(() => {
let num = Math.random()
if (num > 0.5) {
resolve('true111111111111')
} else {
reject('false111111111')
}
console.log(num)
}, 2000)
})
let p2 = p1.then(value => {
console.log(value, '我是p2')
})
let p3 = p2.catch(value => {
console.log(value, '我是p3')
return new Error(value)
})