Promise回顾

异步编程

  • js是单线程机制;
  • 单线程就是按次序执行,执行完一个任务再执行下一个;
  • 当js触发到异步任务时,会将异步任务交给浏览器处理,当执行有结果时,会把异步任务的回调函数插入待处理队列的队尾。

回调函数&回调地狱

  • 一个函数被当做一个实参传入到另一个函数,并且这个函数在外部函数内被调用,用来完成某些任务的函数。
  • 当一个回调函数嵌套一个回调函数的时候就会出现一个嵌套结构当嵌套得多了就会出现回调地狱的情况。
$.ajax({
  url: '我是第一个请求',
  type: 'get',
  success (res) {
    // 现在发送第二个请求
    $.ajax({
      url: '我是第二个请求'type:'post',
      data: { a: res.a, b: res.b },
      success (res1) {
        // 进行第三个请求
        $.ajax({
          url: '我是第三个请求',
          type:'post',
          data: { a: res1.a, b: res1.b },
          success (res2) { 
            console.log(res2) 
          }
        })
      }
    })
  }
})

Promise

  • Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件更合理和更强大,它是一个ES6提供的类,目的是更加优雅地书写复杂的异步任务;
  • Promise对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
  • 一旦状态改变,就不会再变,任何时候都可以得到这个结果。
  • Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。
new Promise(function (resolve, reject) {
  // resolve 表示成功的回调
  // reject 表示失败的回调
}).then(function (res) {
  // 成功的函数
}).catch(function (err) {
  // 失败的函数
})
  • 能看出来构造函数接收了一个函数作为参数,该函数就是Promise构造函数的回调函数,该函数中有两个参数resolve和reject,这两个参数也分别是两个函数。
  • then方法是Promise实例所具有的方法,then方法是定义在原型对象Promise.prototype上的。
  • Promise链式;
  • Promise.all();
  • Promise.all()使用场景:在一个页面,等到页面中所有的请求返回数据后,再渲染页面。
  • 虽然解决异步编程的终极解决方案是async和await,但是它们也是基于Promise封装而来的。

详细内容见:
https://blog.csdn.net/m0_52040370/article/details/127197204

你可能感兴趣的:(javascript,前端,原型模式,Promise,异步)