ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Promise--ES6新特性

2019-03-25 14:52:14  阅读:200  来源: 互联网

标签:ES6 resolve 函数 异步 状态 特性 promise Promise


 面试问题:你了解promise吗?

1. promise是一个对象,用来传递异步操作的消息。通过promise提供的统一的API,可以对异步操作的结果做进一步处理,使得控制异步操作更加容易。

2. promise的构造函数接收一个参数,这个参数是一个函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数

- resolve函数的作用,当Promise对象的状态从从Pending(未完成)变为Resolved,在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; 

- reject函数的作用是,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

3. Promise实例生成以后,可以用then方法分别制定Resolved状态和Rejected状态的回调函数:

- promise.then ( onFulfilled, onRejected )  

- 接收两个函数作为参数,一个在 fulfilled 的时候被调用,一个在 rejected 的时候被调用,接收参数就是 future,onFulfilled对应 resolve, onRejected 对应 reject。

3. 当promise状态固定之后,就会调取 then()方法,进行处理,then 方法指定的回调函数返回的是另一个promise,所以就可以实现连续的 then方法的调用来代替回调嵌套,从而避免了回调地狱,提高了代码的可读性和可维护性。

 

 

基本用法:

var promise = new Promise(function(resolve,reject){ 

if(/* 异步操作成功 */)

 {

    resolve(value); 

 }else{ 

  reject(error); 

 } 

});

 

1. Promise的构造函数接收一个参数,这个参数是一个函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数

resolve函数的作用,将Promise对象的状态从从Pending(未完成)变为Resolved,在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; 

reject函数的作用是,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

 

2. Promise实例生成以后,可以用then方法分别制定Resolved状态和Rejected状态的回调函数:

    - promise.then ( onFulfilled, onRejected )  

    - 接收两个函数作为参数,一个在 fulfilled 的时候被调用,一个在 rejected 的时候被调用,接收参数就是 future,onFulfilled对应 resolve, onRejected 对应 reject。

 

状态:

pending: 初始状态, 非 fulfilled 或 rejected.   

fulfilled: 成功的操作.   

rejected: 失败的操作.  

settled: Promise已被fulfilled或rejected,且不是pending  

另外, fulfilled 与 rejected 一起合称 settled。

 

 Promise对象有以下2个特点: 

1. 对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

 2. 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved;从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对Promise对象田静回调函数,也会立即得到这个结果。

 

基本的api

 - Promise.resolve():

   - 将现有对象转成promise对象

 - Promise.reject():

    - 同上,转成的promise对象状态为Rejected

 - Promise.prototype.then():

    - 为Promise实例添加状态改变时的回调函数

 - Promise.prototype.catch():  

    - 用于指定发生错误时的回调函数

 - Promise.all():

    - 接收一个数组作为参数,数组内部都为promise实例,如果不是会先调用Promise。resolve方法将Promise转为Promise实例。当所有promise实例状态均为Fulfilled,Promise.all()的状态才会为Fullfilled

 - Promise.race():

    - 同Promise.all()将多个Promise实例包装成一个新的promise实例,但是只要其中一个实例状态改变Promise.race()的状态就会跟着改变

 

两个附加方法

- done()

- finally()

 

标签:ES6,resolve,函数,异步,状态,特性,promise,Promise
来源: https://www.cnblogs.com/saltFish-blog/p/10593627.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有