const promise = new Promise((resolve, reject) => {
let result = dosomething();
if (result) {
resolve('successMsg');
} else {
reject('errorMsg');
}
})
//方法1(推荐)
promise
.then(msg => console.log(msg))
.catch(err => console.log(err)
.finally(() => console.log('finally done'))
//方法2
promise.then(
msg => console.log(msg),
err => console.log(err)
).finally(() => console.log('finally done'))
Promise.prototype.then()
第一个参数是resolved状态的回调函数(即上面代码中的resolve)
第二个参数是rejected状态的回调函数(即上面代码中的reject)
Promise.prototype.catch()
相当于Promise.prototype.then(null, reject) 或者 Promise.prototype.then(undefined, reject)
Promise.prototype.finally()
不管Promise最终状态如何都会执行的操作
Promise.all(Array)
接收一个promise数组作为参数,当所有promise都成功时,才进入then操作,否则进入catch操作
Promise.race(Array)
接收一个promise数组作为参数,执行最先改变状态的promise的回调函数
Promise.allSetteled(Array)
接收一个promise数组作为参数,只有所有promise都返回结果,才进入then操作,且只会进入then操作
Promise.any(Array)
好像已经废弃了,浏览器报错:Uncaught TypeError: Promise.any is not a function
function test1(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('执行 test1')
resolve('test1')
}, 1000)
})
}
function test2(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('执行 test2')
resolve('test2')
}, 2000)
})
}
function test3(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('执行 test3')
resolve('test3')
}, 3000)
})
}
Promise.all([test1(), test2(), test3()])
.then(res => {
console.log(res)
})
// 执行 test1
// 执行 test2
// 执行 test3
// (3) ["test1", "test2", "test3"]
Promise.race([test1(), test2(), test3()])
.then(res => {
console.log(res)
})
// 执行 test1
// test1
// 执行 test2
// 执行 test3
// 直接return可以把值传给后面的then
// 直接throw可以把错误传给后面的catch
test1().then(res => {
console.log(res);
return '后面的then会接收到这个值'
}).then(res => {
console.log('then :'+res);
throw new Error('后面的catch会捕获这个错误')
}).catch(res => {
console.log('catch :'+res)
})
promise.reject()
返回一个Promise实例,状态为rejected
var p = Promise.reject('123');
console.dir(p)
promise.resolve()
返回一个Promise实例,状态为resolved
var p = Promise.resolve('123');
console.dir(p)