jQuery中的异步处理
基本用法
$.post("http://xxx.com/getData.php",null,function(data){
alert(data);
});
如果这里边又出现一次回调,怎么写呢?
很low的方式
$.post("http://xxx.com/getData.php",null,function(data){
$.get();
});
这种回调里嵌套回调,可读非常差的。
其实jQuery中模拟了Promise的开发方式
var postResult = $.post("http://xxx.com/getData.php");
// 上一个成功才执行下面
postResult.done(function(data){
alert(data);
});
这是jquery对promise写法的模拟,另外还有fail失败才执行回调、always不论成功还是失败都会执行。
下面来看一下ES2015中原生的promise
先看一段经典代码
var p = new Promise(function(resolve,reject){
setTimeout(function(){ //可以把这句看成是ajax
resolve("zhangsan"); //如果成功则执行resolve函数
},1000);
});
p.then(function(data){ //如果成功
console.log(data);//打印:zhangsan
},function(data){
console.log("失败了");
});
Promise基本讲解
Pending(进行中,默认)、Resolved(已完成)、Rejected(已失败)。
promise构造函数接收一个函数作为参数,该函数的2个参数分别又是2个函数。
第一个表示成功后改变状态Pending -> Resolved
第二个表示失败后改变状态Pending -> Rejected
这个改变的过程需要我们手动实现.
另一种写法:
var p = new Promise((success,faile)=>{
success("成功");
});
// 回调
p.then(function(data){ //如果成功
console.log(data);//打印:zhangsan
},function(data){
console.log("失败了");
});