1、Promise 的含义


2、同步、异步、回调函数相关概念

    /* 例2.1 */
    var x = true;
    while(x);
    console.log("don't carry out");    //不会执行
    上面的例子即同步模式,其中的while是一个死循环,它会阻塞进程,因此第三句console不会执行。
    同步模式比较简单,也较容易编写。但问题也显而易见,如果请求的时间较长,而阻塞了后面代码的执行,
    体验是很不好的。因此对于一些耗时的操作,异步模式则是更好的选择。
    /* 例2.2 */
    setTimeout(function() {
        console.log('taskA, asynchronous');
    }, 0);
    console.log('taskB, synchronize');
    //while(true);

    -------ouput-------
    taskB, synchronize
    taskA, asynchronous
    我们可以看到,定时器延时的时间明明为0,但taskA还是晚于taskB执行。
    这是为什么呢?由于定时器是异步的,异步任务会在当前脚本的所有同步 任务执行完才会执行。
    如果同步代码中含有死循环,即将上例的注释去掉,那么这个异步任务就不会执行,因为同步任务阻塞了进程。

    **WikiPedia对于callback的定义。**
    In computer programming, a callback is a piece of executable code that is passed as
    an argument to other code, which is expected to call back (execute) the argument
    at some convenient time.
    可以看出,回调函数是一段可执行的代码段,它以「参数」的形式传递给其他代码,
    在其合适的时间执行这段(回调函数)的代码。
    **WikiPedia还定义**
    The invocation may be immediate as in a synchronous callback,
    or it might happen at a later time as in an asynchronous callback.
    也就是说,回调函数不仅可以用于异步调用,一般同步的场景也可以用回调。
    在同步调用下,回调函数一般是最后执行的。而异步调用下,可能一段时间后执行或不执行(未达到执行的条件)。

3、Promise 的特点和基本用法

  • 对象的状态不受外界影响,pending(进行中)、fulfiled(已完成)、rejected(已失败)
  • 一旦状态改变,就不会再变,任何时候都可以得到这个结果,状态改变只有两种可能,称为(resolved)
es6规定,Promise对象是一个构造函数,用来生成Promise实例。
扩展构造函数回顾:特殊方法,创建对象时初始化对象,为对象成员变量赋初始值,与new一起使用。
一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
var promise = new promise(function(resove, reject){
  // ... some code
  if (/*异步成功*/){
    resove(value);
  } else{
    reject(error);。
  }
});

    let p= new Promise((resolve, reject)=>{
        let a1='成功传出去的对象';
        let a2='失败传出去的对象';
        var timer = setTimeout(function () {
                     console.log('after resolve');
                    resolve(a1);
                    reject(a2);
                    console.log('after error');
                }, 1000);
    });
    p.then(value=>{
        console.log(value);
    },error=>{
        console.log('.then的第二个参数');
        console.log(error)
    });
    p.catch(error=>{
        console.log('.catch');
        console.log(error);
    });
    

上面例子的输出效果,出现的第一行是Promise{<pending>},
然后再次输入p 按回车执行打印出来p是这样Promise{<resolved>}
然后点开看 可以看到控制台提示promiseStatus :resolved 说明promise的状态已经成为了resolved

上面例子把resolve(a1)去掉,结果如下:

4、解读promise中唯一的参数、resolve参数、reject参数、then()、catch()方法的意义


03-05 16:00