Promise

什么是 promise ?

就是承诺。什么是承诺?就是答应过要做到的事情。什么又是答应过要做到的事情?在人类世界里,是爱❤️,是友情🤼‍♂️,是亲情👪,是爱情💑。可是如果你没有履行承诺呢?你也许会失去一些重要的东西比如信任、依赖、机遇、金钱等等,所以,各位,不要轻易作出承诺哦,请改掉喜欢口嗨👄🔊的习惯!

但是 JavaScript 的 Promise 却不会,它不仅完成承诺的能力,还有告诉你它做不到的厚脸皮。

Promise 有三个状态:

  1. pending - 等待⌛️
  2. resolved - 完成✅
  3. rejected - 拒绝❌

这个承诺一旦从等待变成完成或拒绝,它就像风蚀的蜡烛🕯️一般,永远不能回去,永远不能改变了😔。

new Promise((resolve, reject) => {
  resolve('success')
  // 无效
  reject('reject')
})

Promise 的构造函数内部的代码是立刻执行的哦。

new Promise((resolve, reject) => {
  console.log('new Promise')
  resolve('success')
})
console.log('finifsh')
// new Promise -> finifsh

Promise 有一个 then 方法,它为 Promise 实现了链式调用。也就是说每次调用 then 之后返回的都是一个 Promise ,并且是一个全新的 Promise ,原因也是因为状态不可变。如果你在 then 中使用了 return ,那么 return 的值会被 Promise.resolve() 包装。

Promise.resolve(1)
  .then(res => {
    console.log(res) // => 1
    return 2 // 包装成 Promise.resolve(2)
  })
  .then(res => {
    console.log(res) // => 2
  })

当然,因此解决了回调地狱的问题。回调地狱是啥?这就不解释了哈,懂的都懂,不懂别问😜。