jQuery中调用ajaxRequest时使用$.when和不使用的区别是什么
两种
ajaxRequest调用写法的差异与适用场景 核心前提
你给出的ajaxRequest方法最终返回的是$.ajax()调用后的jqXHR对象,该对象本身就实现了jQuery的Deferred/Promise接口,自带done、fail、always等异步回调方法,无需额外包装即可直接使用。
具体差异
1. 单请求场景下无实质功能差别
当$.when()仅传入1个Deferred对象(即单个ajaxRequest的返回值)时,它返回的Promise对象和原ajaxRequest返回的jqXHR对象行为完全一致,done回调拿到的返回数据也没有任何区别。
这种场景下用$.when属于冗余写法,没有实际收益,仅多了一层可以忽略的包装性能开销。
2. 多请求并行场景下能力差异极大
$.when的核心作用是聚合多个并行异步任务,等待所有任务都完成后再统一触发回调,这是直接调用单个ajaxRequest无法实现的:
// 示例:并行请求国家、城市两个接口,都返回成功后再统一处理 $.when( ajaxRequest("GET", "Api/Filter/Country", null, true), ajaxRequest("GET", "Api/Filter/City", null, true) ).done(function (countryData, cityData) { // 回调参数按请求传入顺序对应每个接口的返回结果 const countryList = countryData[0]; const cityList = cityData[0]; // 后续业务逻辑 })
如果不使用$.when,单独给每个请求绑定done回调,无法保证两个请求都返回后再执行逻辑。
3. 异常触发规则的差异
- 单请求场景下,两种写法的异常回调触发逻辑完全一致,请求失败就会触发
fail回调。 - 多请求场景下,
$.when的异常回调只要有任意一个请求失败就会立即触发,不会等待其余未完成的请求返回结果。
适用场景总结
- 仅处理单个异步请求时,直接使用
ajaxRequest(...).done(...)的写法即可,简洁高效,不需要额外套$.when。 - 需要同时发起2个及以上并行异步请求,且必须等待所有请求都成功返回后再执行后续逻辑时,使用
$.when包裹所有请求的写法。
内容的提问来源于stack exchange,提问作者Jeroen Denny
相关产品推荐
相关产品推荐

