Promise笔记

    <script>
      /* Promise面试题
       */
      // 1.基本的Promise面试题
      const promsie = new Promise((resolve, reject) => {
        console.log(1)
        resolve()
        console.log(2)
      })

      promsie.then(() => {
        console.log(3)
      })

      console.log(4)

      /* 执行顺序 1243 */

      //   2.promise的状态
      const promise1 = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('success')
        }, 1000)
      })

      const promise2 = promise1.then(() => {
        return new Error('报错')
      })

      console.log(promise1)
      console.log(promise2)

      setTimeout(() => {
        console.log('promsie1', promise1)
        console.log('promsie2', promise2)
      }, 2000)

      /* 注意时间与return   pp */

      //   3.Promise的状态的固化

      const p1 = new Promise((resolve, reject) => {
        resolve('success1')
        reject('error')
        resolve('success2')
      })

      p1.then((res) => {
        console.log('then', res)
      }).catch((error) => {
        console.log('catch', err)
      })

      //   这里的针对promoise的固化 success1 就不会走下面的reject

      //   4.Promise的catch一般放在最后一定会执行,不然没有throw报错是不会执行catch的

      Promise.resovele(1)
        .then((res) => {
          console.log(res)
          return 2
        })
        .catch((err) => {
          return 3
        })
        .then((res) => {
          console.log(res)
        })

      /* 12  */

      //   4.Promise 的执行同步任务的时间点是否相同

      const p1 = new Promsie((resolve, reject) => {
        setTimeout(() => {
          console.log('once')
          resolve('success')
        }, 1000)
      })

      const start = Date.now()

      p1.then((res) => {
        console.log(res, Date.now - start)
      })

      p1.then((res) => {
        console.log(res, Date.now - start)
      })

      /* 1001 1001 */

      //   5.针对 return和throw的报错是否会执行.catch

      Promise.resolve()
        .then(() => {
          return new Error('error')
        })
        .then((res) => {
          console.log('then', res)
        })
        .catch((err) => {
          console.log('catch', err)
        })

      /*  new Error('error') */

      // 6.Promise的引用类型错误,不能在.then中不能返回本身
      const p1 = Promise.resolve().then(() => {
        return p1
      })

      p1.catch(console.log(1))
      /* Type Error */

      //   7.Promise针对.then的参数的问题
      Promise.resolve(2).then(3).then(Promise.resolve(4)).then(console.log)
      /* 2 */

      //   8.Promise和Node一起考的时候

      process.nextTick(() => {
        console.log('nextTick', 1)
      })

      Promise.resolve().then(() => {
        console.log('then', 2)
      })

      setImmediate(() => {
        console.log('setImmediate', 3)
      })

      console.log('end', 4)

      /* 4123 */

      //   9.Promise的通常题

      var p1 = new Promise((resolve, reject) => {
        resolve(1)
      })

      p1.then((value) => {
        console.log(value) //1
        return value * 2
      })

        .then((val) => {
          console.log(val)
        })
        .then((val) => {
          console.log(val)
          return Promise.resolve('resolve')
        })
        .then(
          (val) => {
            console.log(val)
          },
          (err) => {
            console.log('reject', err)
          }
        )

      /*  1 2 undefined  resolve  reject */

      //   10. Promise的 resolve

      var p1 = Promise.resolve(1)
      var p2 = Promise.resolve(p1)
      var p3 = new Promise((resolve, reject) => {
        resolve(1)
      })

      var p4 = new Promise((resolve, reject) => {
        reject(p1)
      })

      console.log(p1 === p2)
      console.log(p1 === p3)
      console.log(p1 === p4)
      console.log(p3 === p4)

      /* true false false false */
    </script>

  总结:Promise考点

  1.Promise固化只有一次,其他固化不执行,除固化代码还会执行

  2.Promise状态 的return Error("xxx")不会执行.catch  只有throw Error("xxx")会执行.catch

  3..Promise固化只有一次

  4.Promise的catch一般放在最后,要有throw报错才会执行.catch的

  5.Promise 的执行同步任务的时间点是相同的

     6.Promise的引用类型错误,不能在.then中不能返回本身
 
  7.Promise针对.then的参数的问题 
   Promise.resolve(2).then(3).then(Promise.resolve(4)).then(console.log) 
  其中 .then(3).then(Promise.resolve(4)) 都是不执行的
 
  8.Promise和Node一起考的时候 针对的是node和Promise的轮询
    process.nextTick(() => {
        console.log('nextTick', 1)
      })
      Promise.resolve().then(() => {
        console.log('then', 2)
      })
      setImmediate(() => {
        console.log('setImmediate', 3)
      })
      console.log('end', 4)
      /* 4123 */
 
  9.Promise的通常题 针对.then 没有进行return 的下次.then的值为undefined
  10.Promise的 resolve 
   var p1 = Promise.resolve(1)
        var p2 = Promise.resolve(p1)
  p1 === p2  指向同一指针
posted @ 2021-09-24 22:02  麻花的野望  阅读(58)  评论(0)    收藏  举报