http://www.cnblogs.com/zhouyangla/p/8848358.html Promise的介绍
promise 主要用来传递异步操作的数据
var data = 接收的异步数据;
console.log(data) 数据不知道是什么,因为不能确定异步是否运行完了
在调用异步里面的数据时,我们不知道异步是否已经运行完成,调用的数据不能确定是不是我们想要的
promise有三个状态:
pending(处理中,等待) 》 resolve(完成,成功)
》 rejected(失败,拒绝)要么成功,要么失败,这两个状态不可能同时存在
创建promise对象
var p = new Promise(function(resolve,reject){
if(异步处理成功了){
resolve(成功的数据)
}else{
reject(失败的原因)
}
})
then(成功(),失败())方法,返回的还是一个promise对象
p.then(function(){},function(){}).then(function(){}) //前面是成功的回调函数,后面是失败的(可不写)
实例:(点击按钮,div出现后台传递的内容)
var btn = document.getElementById("btn");
var box = document.getElementById("box");
function ajax(url,callback1,callback2){ //封装ajax 参数:地址,成功的回调函数,失败的回调函数
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest()
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP")
}
xhr.onreadystatechange = function(){ //此处可用onload事件触发
if(xhr.readyState === 4){
if(xhr.status === 200){
callback1(xhr.responseText) //传输成功,运行成功的回调,数据做为参数传出
}else{
callback2(xhr.status) //传输失败,运行失败的回调,传出失败的编号
}
}
}
xhr.open("GET",url,true);
xhr.send();
}
btn.onclick = function(){
var p = new Promise(function(resolve,reject){
ajax("xxx.txt",function(str){ //当异步传输成功后,str 接收到传出来的数据
resolve(str)
},function(str){ //当异步传输失败,str 接收到失败的编号
reject(str)
})
})
p.then(function(var){
box.innerHTML = var; //将传输成功后,接收的数据添加
},function(var){
box.innerHTML = var; //将传输失败后,接收到失败的编号添加
})
}
catch()方法用来捕获错误,
var p = new Promise(function(resolve,reject){
reject('123')
})
p.catch(function(err){
console.log(err) //123
})
throw 制造错误,主要用在node中
var p1 = new Promise(function(resolve,reject){
resolve("成功了");
})
p1.then(function(value){
console.log(value);
throw '发生了错误'
}).catch(function(err){
console.log(err)
})