ES6--promise

promise简介

  • Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理
    和更强大。
  • 所谓 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是
    一个异步操作)的结果
  • 从语法上说,Promise 是一个对象,从它可以获取异步操作的消
  • 有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)
  1. 基本语法
let promise = new Promise(function(resolve,reject){
		//promise 指定两个参数
		//resolve  成功调用
		//reject	失败调用
});

通过then()调用 指定两个函数作为参数
第二个参数是可选的,不一定要提供

promise.then(res=>{
	//成功调用后返回
},err=>{
	//调用失败后返回
})
  1. Promise.resolve(‘aa’) : 将现有的东西,转成一个 promise 对象 等价于
new Promise((resolve, reject) =>{
reject('aaa')
});
  1. Promise.all([p1, p2, p3]): 把 promise 打包,扔到一个数组里面,打包完还是一个
    promise 对象
let p1 = Promise.resolve("aaaa");
let p2 = Promise.resolve("bbbb");
let p3 = Promise.resolve("cccc");
Promise.all([p1,p2,p3]).then(res=>{
	//p1,p2,p3 状态必须是resolve===>成功
	let [res1,res2,res3] = res;		//必须解构赋值 ****
	console.log(...res);
})
  1. promise 调用AJAX
function getXhr() {
	var xhr = null;
	if(window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	} else {
		xhr = new ActiveXObject("Microsoft.XMLHttp");
	}
	return xhr;
}
function getAjax(url, fn) {
	var xhr = getXhr();
	xhr.open("get", url, true);
	xhr.onreadystatechange = function() {
		if(xhr.readyState == 4 && xhr.status == 200) {
			//console.log("成功!")
			var datajson = eval("(" + xhr.responseText + ")");
			fn(datajson);
		}
	}
	xhr.send(null); 
}

let promise=new Promise((resolve,reject)=>{
	if(getXhr()){
		resolve(true);
	}else{
		reject("ajax运行错误");
	}
})
promise.then(res => {
	getAjax("data/data1.json", res=> {
		console.log(res)
	},rej=>{
		console.log("程序错误")
	})
})
上一篇:Promise 对象


下一篇:Promise学习(二)