针对jquery的when方法做的应变
程序员文章站
2022-07-13 17:09:27
...
需求:a,b两个任务都处理(不管a,b是成功还是失败)后,执行后面的任务。
代码1:
可能出现a任务失败后,直接执行后面的任务了
when方法的定义就是任意失败,或者全部成功就往下执行。怎么办呢?
通过一个always的包装解决:
这里的重点是then后面有个always,always方法返回的一定是成功的,让when方法满足都成功就往下执行的条件。
代码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方法满足都成功就往下执行的条件。
上一篇: map和flatmap的区别