美文网首页编程go之Nodejs
Koa基础 Promise函数

Koa基础 Promise函数

作者: 编程go | 来源:发表于2017-07-08 18:05 被阅读14次
    1. Promise 函数的特性
    • ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。
    • Promise 函数可以看成一个容器,里面有未来才会执行的函数,函数的参数一般也是异步执行的结果。
    • Promise 函数提供了统一的语法规范,各种一步操作要求使用同样的方式处理。
    • Promise 函数有三种状态:pending, resolved 和 rejected
    • Promise 函数两种状态只有两种转换路径:
      pending -----> resolved
      pending -----> rejected
    • Promise 函数的状态有两个特点:
      1. Promise 函数的状态不受外界的影响,只有异步操作的结果,可以决定当前是哪一种状态。
      2. 一旦状态改变,就不会再变,任何时候都可以得到这个结果。

    下面是一段Demo,

    var checkUserName = function(name) {
        var promise = new Promise(function(resolve, reject) {
            if (name == 'Spursy')
                resolve('successed');
            else
                reject('failed');
        });
    
        return promise;
    } 
    
    checkUserName('Spursy').then(
        result => {
            console.log(`the result is ${result}.`);    // The result is successed.
    }).catch(
        error => {
            console.log(`The error is ${error}.`);
        }
    );
    checkUserName('YY').then(
        result => {
            console.log(`the result is ${result}.`);
    }).catch(
        error => {
            console.log(`The error is ${error}.`);     // The result is failed.
        }
    );
    

    从上面的Demo,可以看出生成的Promise 对象的实例并不会立即执行而是需要在实例对象调用then方法时才会执行Promise实例对象内部的方法体。

    2. Promise.prototype.then()

    then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。

    checkUserName('YY').then(function(age) {
              return checkUserAge(age);
     }).then(
        result => {
            console.log(`the result is ${result}.`);
    }).catch(
        error => {
            console.log(`The error is ${error}.`);     // The result is failed.
        }
    );
    
    3. Promise.prototype.all() 与 Promise.prototype.race()
    • 都是将多个Promise实例对象封装成一个实例对象。
    • all() 接受的Promise对象数组必须全部resolved 后才会返回Promise 对象给then(),如果中间有一个Promise 对象不是Resolved,立刻给Then()传递rejected 的状态。
    • race 接受的Promise对象数组只要有一个Promise 对象的状态发生了改变,立刻给then()传递已经改变状态的Promise对象的状态。
    var p = Promise.all([p1, p2, p3])
    p.then(
        resolved => {}
    ).catch(
        error => {}
    )
    
    4. Promise.resolve() 与 Promise.reject()
    • 作用就是将现有的对象转换为Promise 对象
    • Promise.resolve()
    Promise.resolve("Spursyy")
    等价于
    var p = new Promise(function(resolve, reject) {
        resolve("Spursyy");
    })
    
    • Promise.reject()
    Promise.reject("YY");
    等价于
    var p = new Promise(function(resolve, reject) {
        reject("YY");
    })
    

    相关文章

      网友评论

        本文标题:Koa基础 Promise函数

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