Open Hibop opened 6 years ago
异步顺序
const promise = new Promise((resolve, reject) => {
console.log(1);
resolve();
console.log(2);
});
promise.then(() => {
console.log(3);
});
console.log(4);
result: 1,2,4,3
Promise状态一旦改变,无法在发生变更
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
reject('error')
}, 1000)
})
promise.then((res)=>{
console.log(res)
},(err)=>{
console.log(err)
})
reslut: success
3. 传值穿透
```js
Promise.resolve(1)
.then(2)
.then(Promise.resolve(3))
.then(console.log)
result: 1
setTimeout(()=>{
console.log('setTimeout')
})
let p1 = new Promise((resolve)=>{
console.log('Promise1')
resolve('Promise2')
})
p1.then((res)=>{
console.log(res)
})
console.log(1)
result: Promise1 1 Promise2 setTimeout
异步操作:
Promise挂载的方法
静态方法:Static Method
实例方法:
构造方法:constructor
三种状态
并发Promise
串行Promise
几个等价用法
then(resolveHandler, rejectHandler)中的rejectHandler不会捕获resolveHandler中的错误, 只会捕获then前面的错误, 而catch是捕获整个链路的错误,故推荐使用catch
promise穿透现象
then(fn) fn如果返回才可以传递到下一个then, 否则fn不为函数或者返回null undefined 下一个then会接收上一个的return值
promise链式调用: 调用队列实现
可以使用更优雅的函数式方式
或者更加函数话封装成函数
通过composition pipeline传入的初始值(可以为同步或者异步),保证顺序执行
ECMAScript 2017标准中, 串行组合可以通过使用async/await而变得更简单:
async await
最后来个小测试巩固下