es6学习一 promise上
简单来说promise在异步操作上提供可读性。(原来es5的异步操作可读性实在太糟糕了,如下图)

瞬间眼前百万只奔腾的马,只不过这种马有个别名,羊驼。
一、创建形式
1. 使用的基本形式:
let promise = new Promise((resolve, reject) => {
  // 设置异步执行的函数条件
  let flag = true;
  if (true) {
    resove();
  } else {
    reject();
  }
});
promise.then(() => {
  //TODO
}, () => {
  //TODO
}).catch(err => {
  console.error(err);
});
Promise.propotype.then()方法中的两个参数(函数)分别对应是Promise中的resolve和reject。Promise.propotype.catch()的方法是出现错误,执行的函数。
catch 和 reject 的区别?
catch 可以是系统的错误,也就是说catch所报的错误不是认为控制的;而 reject 的错误是人为对参数设计条件的不满足的错误。
2. 传参的异步使用方式
function asyne(arg) {
  let promise = new Promise((resolve, reject) => {
    // 设置异步执行的函数条件
    let flag = true;
    if (flag) {
      resolve(arg);
    } else {
      reject(new Error('This is a error!'));
    }
  });
  return promise;
}
asyne(1).then(value => {
  // TODO
  console.log(1);
}, function(error) {
  // TODO
}).catch(err => {
  console.log(`Error: ${err})`);
});
3. 链式调用
let promise = new Promise((resolve, reject) => {
    resove();
});
promise.then(() => {
  return new Promise((resolve, reject) => {
    resove();
  });
}).then(() => {
  // TODO
});
二、 应用
1. 图片加载
function loadImageAsync(url) {
  return new Promise((resolve, reject) => {
    var image = new Image();
    image.onload = function() {
      resolve(image);
    };
    image.onerror = function() {
      reject(new Error('Could not load image at ' + url));
    };
    image.src = url;
  });
}
let img_url = 'http://img2.niutuku.com/desk/1208/1404/ntk-1404-393.jpg';
loadImageAsync(img_url).then(img => {
  document.body.appendChild(img);
});
2. Ajax上的应用
var getJSON = function(url) {
  var promise = new Promise((resolve, reject) => {
    var client = new XMLHttpRequest();
    client.open("GET", url);
    client.onreadystatechange = handler;
    client.responseType = "json";
    client.setRequestHeader("Accept", "application/json");
    client.send();
    function handler() {
      if (this.readyState !== 4) {
        return;
      }
      if (this.status === 200) {
        resolve(this.response);
      } else {
        reject(new Error(this.statusText));
      }
    };
  });
  return promise;
};
getJSON("/package.json").then(json => {
  console.log(`Content: ${json}`);
},err => {
	console.error(`Error: ${err}`);
});
												
											es6学习一 promise上的更多相关文章
- es6学习笔记--promise对象
		
Promise对象是为了简化异步编程.解决回调地狱情况 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可 ...
 - ES6学习之Promise
		
详见之前文章:Promise详解
 - ES6学习笔记(十二)异步解决方案Promise
		
1.Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了P ...
 - ES6 - 基础学习(8): Promise 对象
		
概述 Promise是异步编程的一种解决方案,比传统的解决方案(多层嵌套回调.回调函数和事件)更强大也更合理.从语法上说,Promise是一个对象,从它可以获取异步操作的消息,Promise 还提供了 ...
 - 深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
		
第一部分,Promise 加入 ES6 标准 原文地址 http://www.cnblogs.com/wangfupeng1988/p/6515855.html 未经作者允许不得转载! 从 jquer ...
 - ES6学习目录
		
前面的话 ES6是JavaScript语言的下一代标准,已经在 2015 年 6 月正式发布.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言 为什么要学 ...
 - javascript的ES6学习总结(第三部分)
		
1.ES6中的面向对象的类 1.1.定义类 在ES5中,我们写一个类,通常是这么写的 function Person(name,age){ this.name = name; this.age = a ...
 - ES6学习笔记(十四)
		
1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Prom ...
 - ES6中的Promise用法
		
Node的产生,大大推动了Javascript这门语言在服务端的发展,使得前端人员可以以很低的门槛转向后端开发. 当然,这并不代表迸发成了全栈.全栈的技能很集中,绝不仅仅是前端会写一些HTML和一些交 ...
 
随机推荐
- Java知多少(30)多态和动态绑定
			
在Java中,父类的变量可以引用父类的实例,也可以引用子类的实例. 请大家先看一段代码: public class Demo { public static void main(String[] ar ...
 - C++ 智能指针六
			
/* 智能指针unique_ptr */ #include <iostream> #include <string> #include <memory> #incl ...
 - Solr中的q与fq参数的区别
			
转自:搜索系统5:Solr中的q与fq参数的区别在那儿 1.对结果排序有影响 今天遇到一个问题,把相同的参数比如name:张三,放到q与fq,两者返回的结果完全不一样. 经过debug发现,原因是这两 ...
 - linux mysql卸载
			
卸载mysql 1.查找以前是否装有mysql 命令:rpm -qa|grep -i mysql 可以看到mysql的包: mysql-libs-5.1.71-1.el6.x86_64 2.删除mys ...
 - [React] 13 - Redux: react-redux
			
Ref: Redux 入门教程(三):React-Redux 的用法 组件拆分规范 使用 React-Redux,需要掌握额外的 API,并且要遵守它的组件拆分规范. React-Redux 将所有组 ...
 - OpenGL——圆公式相关变化的绘制
			
#include<iostream> #include <math.h> //旧版本 固定管线 #include<Windows.h> #include <G ...
 - 使用jenkins pipeline,并发selenium测试  ---  你值得了解
			
一.契机 相信很多使用selenium进行UI测试,再对接jenkins时,都是简单的在jenkins上将命令输入就完事了. 但是,相信你一定会遇到以下问题: 1.你需要同时跑不同文件或不同类的用例, ...
 - C++服务器下载文件的两种方式
			
#include <afxinet.h>#include "wininet.h" #pragma comment( lib, "wininet.lib&quo ...
 - 10.23 crm(3)
			
2018-10-23 20:34:30 继续增加新的功能!在代码注释里面有! 越努力,越幸运!永远不要高估自己! 还有明天再加上rbca权限管理系统就完美了! 然后crm做完,再过几天不挂针一切好了也 ...
 - day_4.28 py
			
2018-4-28 15:13:39 ''' 在方法名字加入两个 __则为私有方法 类似于private 方法 ''' class Dog: #私有方法 def __send_msg(self): p ...