$.wait = function(time) {
return $.Deferred(function(dfd) {
setTimeout(dfd.resolve, time);
});
}
使用方法如下:
复制代码 代码如下:
$.wait(5000).then(function() {
alert("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 dfr = $.Deferred();
$.ajax({
url:"http://search.twitter.com/search.json",
data:{q:query},
dataType:'jsonp',
success:dfr.resolve
});
return dfr.promise();
}
}
使用方法如下:
复制代码 代码如下:
Twitter.search('intridea').then(function(data) {
alert(data.results[0].text);
});
deferred对象的另一个优势是可以附加多个回调函数。
复制代码 代码如下:
function doSomething(arg) {
var dfr = $.Deferred();
setTimeout(function() {
dfr.reject("Sorry, something went wrong.");
});
return dfr;
}
doSomething("uh oh").done(function() {
alert("Won't happen, we're erroring here!");
}).fail(function(message) {
alert(message)
});
您可能感兴趣的文章: