需求:a,b两个任务都处理(不管a,b是成功还是失败)后,执行后面的任务。
代码1:
-
- var leftResult = leftPromise.then(
- function (value) {
- console.info("jsonA end");
- }, function () {
- console.info("jsonA fail");
- }
- );
-
- var rightResult = rightPromise.then(
- function (value) {
- console.info("jsonB end");
- }, function () {
- $("#jsonB").val("");
- console.info("jsonB fail");
- }
- );
-
- $.when(leftResult, rightResult).always(
- function(){
- console.info("start compare");
- });
-
可能出现a任务失败后,直接执行后面的任务了
when方法的定义就是任意失败,或者全部成功就往下执行。怎么办呢?
通过一个always的包装解决:
-
- var leftResult = leftPromise.then(
- function (value) {
- console.info("jsonA end");
- }, function () {
- console.info("jsonA fail");
- }
- ).always(
- function () {
- console.info("jsonA always");
- var d = $.Deferred();
- d.resolve();
- return d.promise();
- }
- );
- var rightResult = rightPromise.then(
- function (value) {
- console.info("jsonB end");
- }, function () {
- $("#jsonB").val("");
- console.info("jsonB fail");
- }
- ).always(
- function () {
- console.info("jsonB always");
- var d = $.Deferred();
- d.resolve();
- return d.promise();
- }
- );
- $.when(leftResult, rightResult).always(
- function(){
- console.info("start compare");
- });
-
这里的重点是then后面有个always,always方法返回的一定是成功的,让when方法满足都成功就往下执行的条件。
霹雳猿教程_-HTML教程-HTML 教程
霹雳猿教程_-HTML教程-HTML 简介
霹雳猿教程_-HTML教程-HTML 基础
霹雳猿教程_-HTML教程-HTML 元素
霹雳猿教程_-HTML教程-HTML 属性
霹雳猿教程_-HTML教程-HTML 标题
霹雳猿教程_-HTML教程-HTML 段落
霹雳猿教程_-HTML教程-HTML 链接
霹雳猿教程_-HTML教程-HTML 头部
霹雳猿教程_-HTML教程-HTML CSS
霹雳猿教程_-HTML教程-HTML 图像
针对jquery的when方法做的应变
原文:http://www.cnblogs.com/qingwengang/p/5974752.html