Go to comments

jQuery 工具方法"当"(when)

$.when()方法是和$.Deferred()挂钩的

参数可以是一个或多个延迟对象

返回值是promise对象


when返回延迟对象,后面可以调用then,

1、三个延迟对象全部返回resolve触发done

2、三个延迟对象有一个返回reject触发fail

$.when(df1, df2, df3)
	.then(function(){
		// done 返回注册成功的回调
	},function(){
		// fail 返回注册失败的回调
	});


应用场景

发送三个ajax请求,有一个失败的都不行的时候用when,因为$.ajax返回Deferred延迟对象


例子

三个createScore返回的都是延迟对象

一个失败返回失败,三个成功返回成功

<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script>

	$.when(createScore1(), createScore2(), createScore3())
		.then(function(ms){
			console.log('oh yeah I do it. ' + ms);
		},function(ms){
			console.log('sorry, I am loser. ' + ms);
		},function(ms){
			console.log('waiting... ' + ms);
		});

	function createScore1(){
		var df = $.Deferred();
		setInterval(function (){
			var score = Math.random() * 100;
			if(score > 50){
				df.resolve('通过了');
			}else if(score < 40){
				df.reject('今天不要在考了');
			}else{
				df.notify('继续加油');
			}
			
		}, 1000);
		return df.promise();
	}

	function createScore2(){
		var df = $.Deferred();
		setInterval(function (){
			var score = Math.random() * 100;
			if(score > 50){
				df.resolve('通过了');
			}else if(score < 40){
				df.reject('今天不要在考了');
			}else{
				df.notify('继续加油');
			}
			
		}, 1000);
		return df.promise();
	}

	function createScore3(){
		var df = $.Deferred();
		setInterval(function (){
			var score = Math.random() * 100;
			if(score > 50){
				df.resolve('通过了');
			}else if(score < 40){
				df.reject('今天不要在考了');
			}else{
				df.notify('继续加油');
			}
			
		}, 1000);
		return df.promise();
	}

</script>



Leave a comment 0 Comments.

Leave a Reply

换一张