美文网首页编程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函数

    1. Promise 函数的特性 ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。 P...

  • part1整理

    函数式编程:JavaScript函数式编程指南 异步编程:异步编程 Promise源码 JavaScript基础知...

  • Koa基础 Generator函数

    Generator 函数的特性 Generator 函数是一个状态机,封装了多个内部状态。 Generator 函...

  • 小议express,koa,koa2

    express->koa->koa2其实就是回调->promise->co或者是generator->await ...

  • Koa基础 Promise,Generate,Async/Awa

    Promise 和Generate是ECMAScript 2015 的特性,Async/Await是ECMAScr...

  • Koa

    一、Koa是什么 二、异步的类型 callback Promise async + await

  • 记录node问题

    1.koa的get请求,调用数据库用promise+async获取数据2.koa-bodyparser 获取po...

  • 微信公众平台消息接口服务nodejs版本

    1. 项目简介 此项目主要采用Promise机制来处理api,方便express,koa和koa2及其他环境使用。...

  • async 与 promise 的区别

    一、基础使用 async函数返回的是一个Promise对象 既然async的本质是一个promise,那必然可以通...

  • Koa基础 Async/Await 函数

    Async/Await 函数的特点 更好的语义,相比较Generator 对象的yield, Async/Awai...

网友评论

    本文标题:Koa基础 Promise函数

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