Promise 有三种状态 pending 进行中 resolved成功 rejected 失败
类似于以下代码 调用 rejected 可以使 Promise 的状态从进行中改为失败,相反调用 resolved可以改为成功
let s = new Promise((res, rej) => {
console.log(111);
rej('dfff') //可以把Promise状态从进行中转换为失败 然后调用then方法
})
s.then(() => {
console.log(1111, res);
}, (obj) => {
console.log(222);
})
//若then的成功回调函数有返回值:
//1.返回值非promise:返回值会作为 参数传递个下一个then的成功的回调
//2.若返回值为promise:则该promise会成为下一个then的promise
// let p = new Promise((resolve, reject) => {
// setTimeout(() => {
// console.log(111);
// resolve('数据')
// // reject('失败数据')
// }, 1000)
// })
// function fn1() {
// let p = new Promise((res, rej) => {
// setTimeout(() => {
// console.log(111);
// res()
// }, 1000)
// })
// return p
// }
// function fn2() {
// return new Promise((res, rej) => {
// setTimeout(() => {
// console.log(222);
// res()
// }, 500)
// })
// }
// function fn3() {
// setTimeout(() => {
// console.log(333);
// }, 200)
// }
// fn1()
// fn2()
// fn3()
//希望 1--- 2---3
// fn1().then(() => {
// return fn2()
// }).then(()=>{
// fn3()
// })
//调用resolve----成功的回调-----fn2
// fn1().then(fn2).then(fn3);//终极目的 以同步的方式写异步代码
// race():
// 可以将多个promise(p1, p2, p3)封装为一个新的promise, 新的promise的状态取决于p1, p2, p3的状态
// 1) 若p1,p2,p3任何一个先成功(fulfilled),则新的promise立即变为成功状态
// 2) 若p1, p2,p3均失败(rejected),则promise就变为失败状态
// all()
// 可以将多个promise(p1, p2, p3)封装为一个新的promise, 新的promise的状态取决于p1, p2, p3的状态
// 1) 若p1,p2,p3都成功(fulfilled),则新的promise立即变为成功状态
// 2) 若p1, p2,p3有一个失败(rejected),则promise就变为失败状态
以下代码就是例子
// let p1 = new Promise((res, rej) => {
// setTimeout(() => {
// res('111')
// // rej('')
// }, 100)
// })
// let p2 = new Promise((res, rej) => {
// setTimeout(() => {
// // res('222')
// rej('222')
// }, 500)
// })
// let p3 = new Promise((res, rej) => {
// setTimeout(() => {
// // res('333')
// rej('333')
// }, 3000)
// })
// let p = Promise.race([p1, p2, p3])
// p.then((res) => {
// console.log(res);
// }).catch(err => {
// console.log('失败:', err);
// })
// p.then((res) => {
// console.log(res, '1111');
// return '22222'
// }).then(res => {
// console.log(res);
// return '3333'
// }).then((res) => {
// console.log(res);
// })
let p1 = new Promise((res, rej) => {
setTimeout(() => {
res('111')
// rej('')
}, 100)
})
let p2 = new Promise((res, rej) => {
setTimeout(() => {
// res('222')
rej('222')
}, 500)
})
let p3 = new Promise((res, rej) => {
setTimeout(() => {
// res('333')
rej('333')
}, 3000)
})
let p = Promise.all([p1, p2, p3])
p.then((res) => {
console.log(res);
}).catch(err => {
console.log('失败:', err);
});