jQuery技术

jQuery.Deferred对象(3)

字号+ 作者:H5之家 来源:H5之家 2017-02-17 13:01 我要评论( )

when方法里面要执行多少个操作,回调函数就有多少个参数,对应前面每一个操作的返回结果。 $.when($.ajax( "/main.php" ),$.ajax( "/modules.php" ),$.ajax( "/lists.php" )).then(function (resp1, resp2, resp3){

when方法里面要执行多少个操作,回调函数就有多少个参数,对应前面每一个操作的返回结果。 

$.when( $.ajax( "/main.php" ), $.ajax( "/modules.php" ), $.ajax( "/lists.php" ) ).then(function (resp1, resp2, resp3){ console.log(resp1); console.log(resp2); console.log(resp3); });


上面代码的回调函数有三个参数,resp1、resp2和resp3,依次对应前面三个ajax操作的返回结果。

如果when方法的参数不是deferred或promise对象,则直接作为回调函数的参数。 

d = $.Deferred() $.when(d, 'World').done(function (s1, s2){ console.log(s1); console.log(s2); }) d.resolve('Hello') // Hello // World


上面代码中,when的第二个参数是一个字符串,则直接作为回调函数的第二个参数。

此外,如果when方法的参数都不是deferred或promise对象,那么when方法的回调函数将立即运行。

5 使用实例

wait方法

我们可以用deferred对象写一个wait方法,表示等待多少毫秒后再执行。 

$.wait = function(time) { return $.Deferred(function(dfd) { setTimeout(dfd.resolve, time); }); }


使用方法如下。 

$.wait(5000).then(function() { console.log("Hello from the future!"); });


改写setTimeout

在上面的wait方法的基础上,还可以改写setTimeout方法,让其返回一个deferred对象。 

function doSomethingLater(fn, time) { var dfd = $.Deferred(); setTimeout(function() { dfd.resolve(fn()); }, time || 0); return dfd.promise(); } var promise = doSomethingLater(function (){ console.log( '已经延迟执行' ); }, 100);


自定义操作使用deferred接口

我们可以利用deferred接口,使得任意操作都可以用done()和fail()指定回调函数。 

Twitter = { search:function(query) { var dfd = $.Deferred(); $.ajax({ url:"http://search.twitter.com/search.json", data:{q:query}, dataType:'jsonp', success:dfd.resolve }); return dfd.promise(); } }


使用方法如下。 

Twitter.search('').then(function(data) { alert(data.results[0].text); });


deferred对象的另一个优势是可以附加多个回调函数。下面的例子使用了上面所改写的setTimeout函数。

function doSomething(arg) { var dfd = $.Deferred(); setTimeout(function() { dfd.reject("Sorry, something went wrong."); }); return dfd; } doSomething("uh oh").done(function() { console.log("Won't happen, we're erroring here!"); }).fail(function(message) { console.log(message); });


jQuery.Deferred对象


标签: 回调 回调函数本文链接

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评