如何并行实现带缓存的条件异步AJAX调用?
优化条件AJAX调用与参数缓存的并行逻辑实现
我有一个和Stack Overflow问题《Elegant solution to conditional AJAX call》类似的需求:需要通过API调用加载参数并缓存,供后续AJAX调用使用,同时要求该逻辑与另一个AJAX调用并行执行。
以下是我的伪代码:
var myParameter; function myUpdate() { $.when( // 始终执行的AJAX调用 $.ajax(params1), (async () => { // 若参数未加载则获取 if (myParameter == null) { let response = await fetch(someParams); myParameter = doStuff(response); // 此处为无关的处理逻辑 } // 若参数为0则返回已完成的Promise,否则执行带参数的AJAX调用 return myParameter == 0 ? $.when() : $.ajax(Object.assign(params2, {data: { value: myParameter }})); })() ).then(handleData); // 最终处理所有响应数据 }
由于$.when对原生Promise和jQuery Deferred的处理存在兼容问题,上述代码无法正常运行,于是我写出了如下臃肿的代码:
var myParameter; function myUpdate() { $.when( $.Deferred((dfrd) => { $.ajax(params1).then((response) => {dfrd.resolve(response)}); }).promise(), $.Deferred((dfrd) => { if (myParameter == null) { fetch(someParams).then((response) => { myParameter = doStuff(response); if(myParameter != 0) { $.ajax(Object.assign(params2, {data: { value = myParameter }})).then((response) => {dfrd.resolve(response)}); } else { dfrd.resolve(); } }); } else { if(myParameter != 0) { $.ajax(Object.assign(params2, {data: { value = myParameter }})).then((response) => {dfrd.resolve(response)}); } else { dfrd.resolve(); } } }).promise() ).then(handleData); }
虽然这段代码可以运行,我也可以参考相关回答精简冗余部分,但不确定这是否是正确的实现方式。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

