1、Promise是什么

  • 词语本意 许诺;允诺;有可能

  • MDN

    • The Promise object is used for asynchronous computations - Promise用于异步计算

    • A Promise represents a value which may be available now, or in the future, or never - 一个Promise表示一个现在、将来或永不可能可用的值

  • 按照用途来解释

    • 主要用于异步计算

    • 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果

    • 可以在对象之间传递和操作Promise,帮助我们处理队列

2、异步

  • JavaScript包含大量的异步操作

    • JavaScript为检查表单而生

    • 创造它的首要目标是操作DOM

    • 异步:将耗时很长的A工作交给系统后,就去继续做B交付的工作,等到系统完成前面的工作之后,再通过回调或者事件,继续做A剩下的工作【从观察者的角度看:AB工作的完成顺序,和交付他们的时间顺序无关,所以叫异步】

  • 异步操作的常见语法

    • 事件侦听与响应
  1. document.getElementById('start').addEventListener('click', start, false);
  2. function start() {
  3. // -> 响应事件,进行相应的操作
  4. }
  5. $("#start").on('click', start);
  • 回调
  1. // -> 比较常见的有ajax
  2. $.ajax({
  3. url: '',
  4. success: function(res) {
  5. // -> 这里就是回调函数
  6. }
  7. });
  8. // -> 或者在页面加载完毕后回调
  9. $(function() {
  10. // -> 这里也是回调函数
  11. });
  • 浏览器中的JavaScript

    • 异步操作以事件为主

    • 回调主要出现在ajax和file api

  • NodeJs的出现

    • 对异步的依赖进一步加剧了

    • 无阻塞高并发,是NodeJs的招牌

    • 异步操作是其保障

    • 大量操作依赖回调函数

3、异步回调的问题

  • 嵌套层次很深,难以维护

  • 无法正常使用return和throw

  • 无法正常检索堆栈信息

  • 多个回调之间难以建立联系

4、Promise简介

  • 是一个代理对象,它和原先要进行的操作并无关系

  • 通过引入一个回调,避免更多的回调

5、Promise的状态

  • pending - [待定]初始状态

  • fulfilled - [实现]操作成功

  • rejected - [被否决]操作失败

  • Promise的状态发生改变,就会触发.then()的响应函数处理后续步骤

  • Promise的状态一经改变,不会再变

  1. console.log('here we go');
  2. new Promise(resolve => {
  3. setTimeout(() => {
  4. resolve('hello');
  5. }, 2000);
  6. }).then(value => {
  7. console.log(value);
  8. });