• promise知识点小结


    断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结。

    为什么使用promise

    谈到Promise,我们知道,这是社区较理想的异步编程解决方案。想要掌握promise,我们首先要知道其提出原因。promise的提出很好的解决了多个相互依赖的代码之间的嵌套问题,比如说C代码需要B代码的结果,B代码需要A代码的结果,用传统的方案,会出现层层嵌套的情况,不易维护。

    promise对象是什么

    promise对象一共有三种状态

    • pending(进行中)
    • fulfilled(已成功)
    • rejected

    promise对象有几种相关方法

    let promise = new Promise((resolve,reject) => {
        //....
        resolve('2');
        
    
        //....
        //reject('4');
    })
    

    最简单创建对象的方法,就是为resolve和reject的状态分别传递参数,也就是成功后的信息或是失败时的提示,当然,不一定要两种状态同时都有。

    then方法,接受两个参数,第一个为fulfilled状态下要进行的步骤,第二个参数可选,指的是rejected状态下执行的方法
    当然,更推荐使用catch方法来定义错误状态下的方法,也和try...catch结构类似

    promise
      .then((data) => { //cb
        // success
      })
      .catch((err) => {
        // error
      });
    

    这个对象有几个特点,

    1.比如状态一旦更改,就不会再发生变化,也就是说pending状态一旦转换成fulfuilled或rejected就不再变化了。

    let promise = new Promise((resolve,reject) => {
    
        resolve('2');
        reject('4');
    })
    

    比如上面的代码,promise在进入fulfulled状态后就不再发生变化了,因此reject的操作是无效的。

    2.比如promise对象创建中的代码是同步的,而then方法是异步的。

    let promise = new Promise((resolve, reject) => {
        console.log('1');
        resolve('2');
      });
    promise.then((resolve,reject) => {
        console.log(resolve);
    
    })
    console.log(3);
    
    // 1 3 2
    

    promise对象创建以后立即执行,故输出1,then方法为异步执行,被放入等待的实践队列,在本次事件循环结束时执行,故先打印3,最后打印2。
    3.不会主动抛出错误
    这一点比较特别,意味着我们必须定义catch方法或then的第二个参数来获取错误,不然,错误无法被发现
    4.chain 链式结构
    then函数的可以接另一个then函数,而then函数返回一个promise对象,因此,这一个promise对象就决定了执行后面的哪些方法

    与promise相关的问题

    then方法与settimeout
    这一个问题非常典型,其实只要明白一点:settimeout在下一轮“事件循环”的时候开始执行,Promise.then()在本轮“事件循环”结束时执行。

    setTimeout(function () {
        console.log('1');
    }, 0);
      
    Promise.resolve().then(function () {
        console.log('2');
    });
    console.log('3');
    

    输出3 2 1

    其实,这些方法,还是要多使用,多练习,才能得心应手

  • 相关阅读:
    2017.11.2 JavaWeb----第六章 Servlet技术
    2017.11.1 微型计算机原理与接口技术-----第七章 中断系统与8237A DMA控制器
    2017.10.31 微型计算机组成原理与接口技术------- 第六章 存储器
    2017.10.30 软件工程------ 软件测试
    选择排序
    快速排序(基础版)
    [经验]java 高级面试解析
    [经验]java 高级面试
    链表翻转的图文讲解(递归与迭代两种实现)yet
    手把手教你如何自定义DAO框架(重量级干货)(yet)
  • 原文地址:https://www.cnblogs.com/yuyuan-bb/p/10472966.html
Copyright © 2020-2023  润新知