// Promise就是一个用来存储数据对象
// 但是由于Promise存取的方式的特殊,所以可以直接将异步调用的结果存储到Promise中
// 对Promise进行链式调用时
// 后边的方法(then和catch)读取的上一步的执行结果
// 如果上一步的执行结果不是当前想要的结果,则跳过当前的方法
/*
当Promise出现异常时,而整个调用链中没有出现catch,则异常会向外抛出
*/
const promise = new Promise((resolve, reject) => {
reject("周一到周五19点,不见不散")
})
promise
.then(r => console.log("第一个then", r))
.catch(r => {
throw new Error("报个错玩")
console.log("出错了")
return "嘻嘻"
})
.then(r => console.log("第二个then", r))
.catch(r => {
console.log("出错了")
})
/*
promise中的
then (return new Promise())
catch
- 这三个方法都会返回一个新的Promise,
Promise中会存储回调函数的返回值
finally
- finally的返回值,不会存储到新的Promise中
*/
// promise
// .then(result => {
// console.log("回调函数", result)
// return "锄禾日当午"
// })
// .then(result => {
// console.log("第二个then", result)
// return "超哥真快乐"
// })
// .then(result => {
// console.log(result)
// })
// promise.then(result => {
// console.log(result)
// }, reason => {
// console.log("出错了", reason)
// })
// function sum(a, b, cb) {
// setTimeout(() => {
// cb(a + b)
// }, 1000);
// }
function sum(a, b) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(a + b)
}, 1000)
})
}
// sum(123, 456).then(result => {
// sum(result, 7).then(result =>{
// sum(result, 8).then(result => {
// console.log(result)
// })
// })
// })
// sum(123, 456)
// .then(result => result + 7)
// .then(result => result + 8)
// .then(result => console.log(result))
/*
静态方法
Promise.resolve() 创建一个立即完成的Promise
Promise.reject() 创建一个立即拒绝的Promise
Promise.all([...]) 同时返回多个Promise的执行结果
其中有一个报错,就返回错误
Promise.allSettled([...]) 同时返回多个Promise的执行结果(无论成功或失败)
{status: 'fulfilled', value: 579}
{status: 'rejected', reason: '哈哈'}
Promise.race([...]) 返回执行最快的Promise(不考虑对错)
Promise.any([...]) 返回执行最快的完成的Promise
*/
// Promise.resolve(10).then(r => console.log(r))
// Promise.reject("错误")
// new Promise((resolve, reject) => {
// resolve(10)
// })
function sum(a, b) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(a + b)
}, 1000)
})
}
// Promise.all([
// sum(123, 456),
// sum(5, 6),
// Promise.reject("哈哈"),
// sum(33, 44)
// ]).then(r => {
// console.log(r)
// })
// Promise.allSettled([
// sum(123, 456),
// sum(5, 6),
// Promise.reject("哈哈"),
// sum(33, 44)
// ]).then(r => {
// console.log(r)
// })
// Promise.race([
// Promise.reject(1111),
// sum(123, 456),
// sum(5, 6),
// sum(33, 44)
// ]).then(r => {
// console.log(r)
// }).catch(r => {
// console.log("错误")
// })
// Promise.any([
// Promise.reject(1111),
// Promise.reject(2222),
// Promise.reject(3333),
// ]).then(r => {
// console.log(r)
// }).catch(r => {
// console.log("错误", r)
// })
setTimeout(()=>{
console.log(1111)
})
Promise.resolve()
.then(() => {
console.log(2222)
})
// console.log(22222)