什么是 promise是异步编程的一种解决方案.
常见的异步编程 setTimeout ajax readfile writefile
promise有三个状态:
Pending
Resolved
Rejected
初始状态 Pending
成功调用 resolve
失败调用 reject
Promise 基本用法
var flag = false
let p = new Promise((resolve, reject) => {
if (flag) {
resolve("成功")
} else {
reject("失败")
}
})
.then()接收的是resolve()成功状态的函数并且可以接受参数
.catch()接受的是reject()失败状态的函数并且可以接受参数
p.then((res) => {
console.log(res)
}).catch((rej) => {
console.log(rej)
})
Promise的静态方法
Promise.resolve()
Promise.reject()
Promise.all()
Promise.resolve() 它使得promise对象直接将成功的resolve函数返回出去,
并把成功传到后面then添加的成功函数中
let a1 = Promise.resolve("成功")
a1.then((res) => {
console.log(res)
})
let a2 = new Promise(function (resolve) {
resolve("成功")
})
a2.then((res) => {
console.log(res)
})
以上这两句代码意思相同
Promise.reject
同上,但是返回的是rejected状态的promise对象
romise.all() 它接收一个promise对象组成的数组作为参数,并返回一个新的promise对象。
all方法必须保证所有的promise都执行resolve后才能执行成功函数
当数组中所有的对象都回调成功(resolve)时,才会执行.then() 并把所有成功的resolve()参数,
依次添加组成一个新的数组,并以新的数组作为新对象resolve的返回值
当数组中有一个对象为reject时,回调失败(reject),执行.catch()
let psal = Promise.all([
Promise.resolve(5),
Promise.resolve(6),
Promise.resolve(7)])
psal.then((res) => {
console.log('resolve', res) // [5, 6, 7]
}).catch((rej) => {
console.log('reject', rej)
})
当数组中有一个对象reject时,新对象状态变为reject,就会被.catch()方法接受。