Promise 是异步编程的一种解决方案。是一个对象,可以获取异步操作的消息。可以将异步操作变成同步操作,
避免层层嵌套的回调函数。
Promise三种状态:
- pending(进行中)
- fulfilled(已成功)
- rejected (已失败)
只有异步操作的结果,可以决定当前是那一种状态,任何其他操作都无法改变这个状态。
Peomise 对象的状态一旦改变,就不会再变。对象的改变只有两种可能:
(1)pending --> fulfilled
(2)pending --> rejected
-
Promise.resolve()
resolve() 可以将现有对象转换为Promise 对象,该实例的状态的 resolved。
注意:resolve() 的Promise 对象是在本轮 "事件循环"(event loop)的结束时执行,而不是在下一轮"事件循环"的开始时。
Promise.resolve() 参数的四种情况
(1)参数是一个Promise 实例
若参数是一个Promise实例,那么resolve()方法将不做任何修改,直接返回这个实例。
(2)参数是一个 thenable 对象 (一个对象具有 then 方法)
若参数是一个 thenable 对象,resolve() 会将这个对象转为Promise对象,然后立即执行thenable 对象的then方法
(3)参数是一个原始值或者不是具有 then 方法的对象
若参数是一个原始值或者不含 then 方法的对象,resolve()方法返回一个新的Promise实例,状态为 resolved。
(4)不带有任何参数
resolve() 若不带参数,会直接返回一个 resolved 状态的Promise 对象。
-
Promise.reject()
reject() 方法返回一个Promise 实例,该实例的状态为 rejected。
注意:Promise.reject()方法的参数会原封不动的作为 reject 的理由,变成后续方法的参数。
-
Promise 基本用法
注意:调用 resolve() 与 reject() 并不会终结 Promise 的参数函数执行。一般来说 调用 resolve() 或 reject () 代表 Promise 操作已结束。
建议在 resolve() 以及 reject() 方法前加上 return 语句。
-
Promise.all() /Promise.race()/Promise.allSettled()/Promise.any() 用于将多个Promise 实例包装成一个新的Peomise 实例
Promise.all() 的接收一个数组作为参数或者必须具有Iterator 接口,且返回的每个成员都是Promise 实例。
注意:若作为参数的Promise实例,自己定义了catch 方法,那么他一旦被 rejected ,并不会触发Promise.all() 的 catch 方法。