美文网首页
Promise入门

Promise入门

作者: Coldhands | 来源:发表于2019-04-22 15:07 被阅读0次

    Promise是什么

    按照用途来解释
    • 主要用于异步计算。
    • 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。
    • 可以在对象之间传递和操作Promise,帮助我们处理队列。

    异步回调

    回调有四个问题
    • 嵌套层次很深,易形成“回调地狱”,难以维护。
    • 无法正常使用 return 和 throw。
    • 无法正常检索堆栈信息。
    • 多个回调之间难以建立联系。

    Promise简介

    初始化一个Promise实例
    new Promise(
      /* 执行器 executor */
      function (resolve, reject) {
        // 一段耗时很长的异步操作
        resolve(); // 数据处理完成
        reject(); // 数据处理错误  
      }
    ).then(function A() {
      // 成功,下一步
    }, function B() {
      // 失败,做相应处理
    })
    
    Promise详解
    • Promise是一个代理对象,它和原先要进行的操作并无关系。
    • 它通过引入一个回调,避免更多的回调。
    Promise有三个状态:
    1. pending [待定] 初始状态(创建实例时,new Promise)
    2. fulfilled [实现] 操作成功(调用resolve)
    3. rejected [被否决] 操作失败(调用reject)
      Promise状态发生改变,就会触发.then()里的响应函数处理后续步骤。
      Promise状态一经改变,不会再变。

    Promise实例一经创建,执行器立即执行。

    假如一个Promise已经完成,再.then() 会怎样?

    console.log('start');
    
    let promise  = new Promise(resolve => {
      setTimeout(() => {
        console.log('the promise fulfilled');
        resolve('hello world');
      }, 1000)
    })
    
    setTimeout(() => {
      promise.then(value => {
         console.log(value)
      })
    }, 3000)
    
    // start
    // the promise fulfilled
    // hello world
    

    假如在.then() 的函数里面不返回新的Promise,会怎样?

    .then()

    • .then()接受两个函数作为参数,分别代表fulfilled和rejected
    • .then()返回一个新的Promise实例,所以它可以链式调用
    • 当前的Promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行
    • 状态响应函数可以返回新的Promisem,或其他值
    • 如果返回新的Promise,那么下一级.then()会在新的Promise状态改变之后执行
    • 如果返回其他任何值,会立即执行下一级.then()

    相关文章

      网友评论

          本文标题:Promise入门

          本文链接:https://www.haomeiwen.com/subject/xgbnwqtx.html