欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

针对jquery的when方法做的应变

程序员文章站 2022-07-13 17:09:27
...
需求: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方法满足都成功就往下执行的条件。