Promise

文章目录
  1. 1. 链式调用为什么要返回新的promise
  2. 2. Promise.js源码的意义
    1. 2.1. async与await相对于Promise
    2. 2.2. Promise和proxy触发的then
  3. 3. Promise.all vs for-await-of

Promise的出现是为了解决回调地狱的问题,但出现await后,大部分场景都用不上了。await不能替代promise的场景

  • Promise.all
  • Promise.race

Promise的三个状态

  • pending
  • fulfilled
  • rejected

链式调用为什么要返回新的promise

  • 这样每一层都方便管理自己的rejectArr
    const p = new Promise(() => {});
    p.then(() => {}).then(() => {});
    // 后续还可以继续往p后追加then
    p.then(()=> {});

Promise.js源码的意义

async与await相对于Promise

async function fn1() {
return 1;
}

async function fn2() {
return await 1;
}

fn1(); // Promise
await fn1(); // 1
fn2(); // Promise
await fn2(); // 1

Promise和proxy触发的then

```

### Promise的thenable测试以及串联执行
```js
Promise.resolve(1).then(res => {
alert(res); // 1
return Promise.resolve(2);
}).then(res => {
alert(res); // 2
return res;
})

Promise.all vs for-await-of