Promise简单理解分析

116 阅读2分钟

promise简单理解分析

(一) 前置知识

  • 回调函数:
    1. 同步回调
      • 理解: 立即执行,完全执行完成之后才结束,不会放入回调队列中。
      • 例子:数组遍历相关的回调函数/Promise的 excutor 函数。
    2. 异步回调
      • 理解: 不会立即执行,会放入回调队列中,后续再执行。
      • 例子:定时器回调/Ajax回调/promise的成功|失败的回调。
  • 代码演示:
      const arr = [1, 2, 3]
      arr.forEach(item => console.log(item)) // 同步回调, 不会放入回调队列, 而是立即执行
      console.log('forEatch()之后')
      setTimeout(() => { // 异步回调, 会放入回调队列, 所有同步执行完后才可能执行
          console.log('timout 回调')
      }, 0)
      console.log('setTimeout 之后')
    

(二) Promise

  1. Promise的作用:Promise是JS异步编程的解决方案之一,以前通常实用回调。
  2. Promise是一个构造函数,Promise对象用来封装一个异步操作并且可以获得结果。
  3. Promise有两种状态:
    • resolved代表成功
    • rejected表示失败
    • 注意:一个Promise对象只能改变一次,无论成功还是失败,都会有一个结果数据,成功的结果数据一般称为 value,失败的结果数据一般称为 reason。
  4. Promise工作流程如下图:
    Promise工作流程
  5. Promise的基本用法:
    // 1. 创建一个新的Promise对象
    const p = new Promise((resolve, reject) => { // 执行器函数,同步执行
        // 2. 执行异步操作任务
        setTimeout(() => {
            const time = Date.now() // 如果当前时间是偶数就代表成功,否则代表失败
            // 3.1 如果成功了,调用resolve(value)
            if (time % 2 === 0) {
                resolve('成功的数据,value = ' + time)
            } else {
                // 3.2 如果失败了,调用reject(reason)
                reject('失败的数据,reason = ' + time)
            }

        }, 1000);
    })

    p.then(value => {
        // 接受得到成功的value数据,专业术语:onResolved
        console.log('成功的回调', value)
    }, reason => {
        // 接受得到失败的reason数据,专业术语:onRejected
        console.log('失败的回调', reason)
    })
  1. 为什么现在使用Promise,回调的缺点在哪里?
    1. 不规范,名称五花八门,有人用success+error,有人使用success+fail,有人用done+fail。
    2. 容易出现回调地狱,回调嵌套,代码变得看不懂。
    3. 很难进行错误处理。 本人参考链接:www.cnblogs.com/jiangweiche…