[关闭]
@JRuiCoder 2016-10-04T13:16:28.000000Z 字数 1145 阅读 1112

Promise

ES6


Promise

Promise对象,代表未来某个将要发生的时间,可以将异步操作以同步操作的流程表达,避免回调函数。

Promise对象的基本用法

  1. var promise =new Promise(function(resolve,reject){
  2. if(true){
  3. resolve(value);
  4. }else{
  5. reject(error);
  6. }
  7. });
  8. promise.then(function(value){
  9. //success
  10. },function(value){
  11. //failure
  12. })

使用promise完成Ajax请求

  1. function getJson(url){
  2. var promise=new Promise(function(resolve,reject){
  3. var obj=new XMLHttpRequest();
  4. obj.open('GET',url);
  5. obj.readystatechange=handler;
  6. obj.responseType='json';
  7. obj.setRequestHeader('Accept','application/json');
  8. obj.send();
  9. function handler(){
  10. if(this.readyState===this.DONE){
  11. if(this.status===200){
  12. resolve(this.response);
  13. }else{
  14. reject(this);
  15. }
  16. }
  17. };
  18. });
  19. return promise;
  20. }

链式操作,从回调函数的横向发展,改为向下发展
catch方法是then(null,rejection)的别名,可以用来捕捉错误

  1. getJson(url).then(function(){}).catch(function(error){})

Promise.all

用于多个异步操作,包装成一个新的Promise对象,操作完成后,新的Promise对象的状态变为fulfilled,其中一个失败,变为rejected

Promise.resolve

需要将现有对象转换为Promise对象,使用Promise.resolve

  1. var promise=new Promise($.ajax(url));

如果resolve方法的参数不是具有then方法的对象,则返回一个新的Promise对象,且它的状态为resolved。

async函数

属于ES7

  1. async function getSomething(){
  2. await get getOne();
  3. return 0;
  4. }

在函数名前面加上async,一旦遇到await就会先返回,等到出发的异步操作完成,再接着执行函数体内后面的语句。

对象状态

未完成 pending
已完成 fulfilled
失败 rejected

Promise/A+规范

此处输入图片的描述

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注