JS Promise

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)
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值