# Promise

# 1.promise有几种状态?

三种pending(进行中),fulfilled(已成功),rejected(已失败)

# 2.promise常见题目?

待完善

# 3.怎么理解promise?

  • promise是个对象,主要用来解决回调地狱。
  • promise.resolve('foo')等价于 new promise(resolve => resolve('foo'))
console.log(1)
new Promise(function(resolve, reject) {
    console.log(2)
})
console.log(3)
// 输出1 2 3
1
2
3
4
5
6

# 4.手写实现promise?

待完善

# 5.promise构造函数是同步执行还是异步执行,then方法呢?

promise构造器是同步执行,then内部回调函数是异步执行

# 6.Promise静态方法,实例方法,使用场景?

  • promise是个类(属性添加static属于实例属性)
  • resolve reject .race .all都属于静态方法。
  • .then,.catch,.finally方法属于实例方法,

# 说说.race和.all?

.race有一个完成了就返回(返回的是完成的那个的值),.all全部完成了才返回(all成功返回的是一个数组,失败返回的是第一个失败的值)

# promise.any?

.race有一个完成就返回,无论成功与失败。而any只要有一个成功就返回,更关心成功。没有成功就是失败,是AggregateError类型的错误

# promise.allSettled

  • 在所有promise都fulfilled或rejected后,返回一个数组(包括成功和失败的)
  • promise.all如果有一个reject就会返回第一个失败的值,丢失了其他成功的

# 7.then方法为什么可以链式调用?

因为then方法会返回一个新的promise

# 实现.then方法

function test(prop) { return new Promise(resolve => { resolve(prop) }) }

# 8.封装同步定时器/如何实现一个sleep函数?

返回一个promise里面封装了定时器(定时器的function就是resolve) function sleep (time) { return new Promise((resolve) => setTimeout(resolve, time)); }

# 9.reject和catch区别?

  • reject抛出异常,catch处理异常
  • reject是promise方法,catch是promise实例