承诺如何在jQuery中使用

  介绍

本篇文章为大家展示了承诺如何在jQuery中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

打开浏览器的控制台先。

& lt; script>   var 才能;defer =, .Deferred美元();   console.log才能(延迟);   & lt;/script>

运行结果:

, 承诺如何在jQuery中使用“> </p> <p>和ES6的承诺对象长的有点像,jQuery的延迟对象也有决心,拒绝,然后方法,还有做,总是失败,……方法.jQuery就是用这个延迟对象来注册异步操作的回调函数,修改并传递异步操作的状态。</p> <p>玩玩递延:</p> <pre类= & lt; script>   function 才能;runAsync () {   ,,,var  defer =, .Deferred美元();   ,,,//做一些异步操作   ,,,setTimeout(函数(){   ,,,,,console.log(& # 39;执行完成& # 39;);   ,,,,,defer.resolve(& # 39;异步请求成功之后返回的数据& # 39;);   ,,,},,1000);   ,,,return 推迟;   ,,}   runAsync才能(),然后(功能(数据){   ,,,console.log(数据)   ,,});   & lt;/script>

运行之后,延迟对象的实例延迟通过解决方法把参数“异步请求成功之后返回的数据“传回到那方法中进行接收,,打印。

和ES6的承诺相似,但是有一点点区别,再看下承诺:

& lt; script>   function 才能;runAsync () {   ,,,var  p =, new 承诺(函数(解决,,拒绝){   ,,,,,   ,,,,,setTimeout(函数(){   ,,,,,,,console.log(& # 39;执行完成& # 39;);   ,,,,,,,解决(& # 39;异步请求成功之后返回的数据& # 39;);   ,,,,,},,1000);   ,,,});   ,,,return  p,,,,,,,   ,,}      runAsync才能(),然后(功能(数据){   ,,,console.log(数据);   ,,});   & lt;/script>

我们发现:

1,创建延迟对象的时候没有传参,而创建承诺对象的时候,传了参数(传了一个匿名函数,函数也有两个参数:决心,拒绝),

2,延迟对象直接调用了解决方法;而承诺对象则是在内部调用的解决方法;

说明:递延对象本身就有解决方法,而承诺对象是在构造器中通过执行解决方法,给承诺对象赋上了执行结果的状态。

这样就有一个弊端:因为递延对象自带解决方法,拿到递延对象之后,就可以随时调用解决方法,其状态可以进行手动干预了

& lt; script>   function 才能;runAsync () {   ,,,var  defer =, .Deferred美元();   ,,,//做一些异步操作   ,,,setTimeout(函数(){   ,,,,,console.log(& # 39;执行完成& # 39;);   ,,,,,defer.resolve(& # 39;异步请求成功之后返回的数据& # 39;);   ,,,},,1000);   ,,,return 推迟;   ,,}   ,var  der =, runAsync ();   ,der.then(功能(数据){   ,,,console.log(数据)   ,});   ,der.resolve(& # 39;在外部结束& # 39;),,   & lt;/script>

,这样的话就直接在外部直接给递延设置了状态,打印”在外部结束”,1 s后打印“执行完成”,不会打印“异步请求成功之后返回的数据”了。

显然,这不好。我发个异步请求,还没收到数据就让人在外部给我结束了.......

当然这个坑jQuery肯定会填的,在递延对象上有一个承诺方法,是一个受限的延迟对象

& lt; script>   function 才能;runAsync () {   ,,,var  def =, .Deferred美元();   ,,,//做一些异步操作   ,,,setTimeout(函数(){   ,,,,,console.log(& # 39;执行完成& # 39;);   ,,,,,def.resolve(& # 39;请求成功之后返回的数据& # 39;);   ,,,},,2000);   ,,,return  def.promise();,//就在这里调用   ,,}   & lt;/script>

所谓受限的延迟对象,就是没有决心和拒绝方法的递延对象。这样就无法在外边改变延迟对象的状态了。

<强>递延对象的那方法和完成,失败语法糖

我们知道,在ES6的承诺规范中,然后方法接受两个参数,分别是执行完成和执行失败的回调,而jquery中进行了增强,还可以接受第三个参数,就是在等待状态时的回调,如下:

<代码>延期。然后(doneFilter [failFilter] [, progressFilter])

然后方法:

& lt; script>   function 才能;runAsync () {   ,,,var  def =, .Deferred美元();   ,,,//做一些异步操作   ,,,setTimeout(函数(){   ,,,,,,var  num =, Math.ceil (math . random() * 10);,//生成1 - 10的随机数   ,,,,,,,如果(num

承诺如何在jQuery中使用