Promise对象的简单用法

要了解一个东西,首先要从,它是什么、用来作什么以及怎么取用它这三个方面来了解。javascript

  1. 首先,promise是什么?

咱们来参考一下MDN对它的定义:java

Promise 对象用于一个异步操做的最终完成(或失败)及其结果值的表示。(简单点说就是处理异步请求。咱们常常会作些承诺,若是我赢了你就嫁给我,若是输了我就嫁给你之类的诺言。这就是promise的中文含义:诺言,一个成功,一个失败。)api

能够看到,promise是一个对象,用来处理异步操做,那么咱们又要了解一下什么是同步异步,如下是我对同步异步的理解:数组

异步:被请求人的消息通知机制,即当被请求者在接收到请求以后,处理请求,处理完成后是否通知请求者的消息通知机制。promise

同步:请求者的事务处理机制,即当请求者发出请求后,是否等待请求结果,继续处理接下来的事务。异步

总结promise是什么:函数

promise是一个构造函数,用来处理javascript中的异步操做。prototype

  1. promise用来作什么?
    在MDN的定义中已经给出答案,它用来处理异步操做,即维护事件处理的状态,方便咱们对异步操做获取更直观的感觉,就是在一个事件处理的过程当中,监听事件处理的状态成功与否,而后由这些状态决定下一步操做。

MDN中对promise有这样的描述:代理

Promise 对象是一个代理对象(代理一个值),被代理的值在Promise对象建立时多是未知的。它容许你为异步操做的成功和失败分别绑定相应的处理方法(handlers)。 这让异步方法能够像同步方法那样返回值,但并非当即返回最终执行结果,而是一个能表明将来出现的结果的promise对象code

引用阮一峰ES6中的一句话介绍promise能为咱们作什么,以及有什么缺点:

有了Promise对象,就能够将异步操做以同步操做的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操做更加容易。

首先,没法取消Promise,一旦新建它就会当即执行,没法中途取消。其次,若是不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,没法得知目前进展到哪个阶段(刚刚开始仍是即将完成)。

  1. 基本用法

Promise是一个构造函数,用来生成Promise实例:

var promise= new Promise(function(resolve,reject){
        //执行一些代码
        if(若是异步操做成功){
            resolve(value)
        }else{
            //异步操做失败
            reject(error)
        }
    })

Promise对象经过维护三种状态来实现异步操做,这三种状态分别是:

  • pending:初始值,不是成功或失败状态
  • fulfilled :成功状态
  • rejected :操做失败状态

在以上实例构建过程当中:Promise在构建实例的过程总接受一个函数做为参数,这个函数又拥有两个函数做为参数(resolve,reject),分别表明着:

  • resolve函数的做用是将Promise对象的状态从“未完成”变为“成功”状态,在异步操做成功时调用,器参数为异步操做返回出的结果。
  • reject函数的做用则恰好相反,是将Promise对象的状态从“未完成”状态改变为“失败”状态,在异步操做失败时调用,其参数为异步操做失败返回的错误信息。

Promise中的经常使用API

  • then
    做用:Promise对象根据异步操做结果,执行相应的回调函数,接受两个回调函数做为参数,第一个为Promise对象状态改变为resolved时调用,第二个回调函数为Promise对象状态改变为reject时调用,第二个参数是可选的,不是必须的,这两个函数都接受Promise传出的值做为参数。
  • catch
    做用:该方法是Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数。
  • all
    做用:该方法用于将多个Promise实例包装成一个新的实例
var  promise=Promise.all([p1,p2,p3])
    //该方法接受一个数组做为参数,数组中p1,p2,p3均为promise实例,只有当数组中的promise对象的状态所有为"成功"状态时,promise的状态才会变为成功状态,并将三个数组中的promise对象返回的结果,按照参数的顺序传递给promise的回调函数。
相关文章
相关标签/搜索