promise中调用ajax

 Promise是异步里面的一种解决方案,解决了回调嵌套的问题,es6将其进行了语言标准,同意了用法,提供了`promise`对象, promise对象有三种状态:pending(进行中) 、Resolved(已经完成)和Rejected(已失败)

ES6规定,Promise对象是一个构造函数,用来生成Promise实例。

1
2
3
4
5
6
7
var  promise= new  Promise( function (resove,reject){
      if  ( /* 异步操作成功 */ ){
     resolve(value);
   else  {
     reject(error);
   }
})

Promise实例生成以后,可以用then方法分别指定Resolved状态和Reject状态的回调函数。

1
2
3
4
5
promise.then( function (value) {
   // success
},  function (error) {
   // failure
});

案例

1
2
3
4
5
6
7
var  promise= new  Promise( function (resolve,reject){
          console.log( 'promise' );
      })
      promise.then( function (){
         console.log( '我后执行' )
      })
      console.log( '我先执行' )<br><br> //上面代码中,Promise新建后立即执行,所以首先输出的是“Promise”。然后,<code>then</code>方法指定的回调函数,<br>//将在当前脚本所有同步任务执行完才会执行,所以“我后执行” 最后输出。

 ajax

复制代码
var  http = {
     get:  function (url) {
         var  promise =  new  Promise( function (resolve, reject) {
             $.ajax({
                 url: url,
                 method:  'get' ,
                 success:  function (data) {
                     resolve(data);
                 },
                 error:  function (xhr, statusText) {
                     reject(statusText);
                 }
             });
         });
         return  promise;
     }
};
http.get( 'solve.php' ).then( function (data) {
     return  data;
},  function (err) {
     return  Promise.reject( 'Sorry, file not Found.' );
}).then( function (data) {
     document.write(data);
},  function (err) {
     document.write(err);
});

Promise三种状态

pending、resolved、rejected

使用语法

var promis = new Promise(function(resolve,reject){ $.ajax({ url:'/api/something.json', method:'get', datatype:'json', success:(res) =>{ resolve(res) }, error:(err)=>{ reject(err) } }) }) promis.then(function(res){ console.log(res) }).catch(function(err){ console.log(err) });

Promise.prototype.then()

链式调用,状态变为resolve
如果把下一步想要的东西return出去,即可让下一个then使用

var promise = new Promise(function(resolve,reject){ $.ajax({ url:'/api/poisearch.json', method:'get', datatype:'json', success:(res) =>{ resolve(res) }, error:(err)=>{ reject(err) } }) }) promise.then(function(res){ return res.data }).then(function(data){ return data.result; }).then(function(result){ console.log(result) });

上面的代码还可以借用箭头函数简写成,极大提升了代码的简洁性和可读性

promise.then(res => res.data)
  .then(data => data.result) .then(result => console.log(result));

Promise.prototype.catch()

如果异步操作抛出错误,状态就会变为Rejected,就会调用catch方法指定的回调函数,处理这个错误。

  1. 另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。
  2. 如果Promise状态已经变成Resolved,再抛出错误是无效的。
  3. catch方法返回的还是一个Promise对象,因此后面还可以接着调用then方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Soyoger

听说打赏的都进了福布斯排行榜。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值