如何确保JavaScript函数在其他Ajax Promise完成后再执行
问题描述
我有几个调用Ajax Promise的JavaScript函数,用于填充字段,代码如下:
var functionA = function () { //Prepare data for ajax service call service.getDataA() .then((data) => $("#inputA").val(data)); } var functionB = function () { //Prepare data for ajax service call service.getDataB() .then((data) => $("#inputB").val(data)); }
对应的Ajax请求代码:
var getDataA = function () { return $.ajax({ type: "GET", url: url, data: data, }); }; var getDataB = function () { return $.ajax({ type: "GET", url: url, data: data, }); };
目前一切正常,但我有一个依赖functionA和functionB执行完成的functionC,需要在两者都完成后再执行functionC,尝试多种方法均未成功,请问该如何实现?
解决方案
问题核心是functionA和functionB没有返回Promise链,导致外部无法追踪它们的完成状态。只需两步即可解决:
让functionA和functionB返回Promise
修改两个函数,返回service.getDataX().then(...)的执行结果(then方法本身会返回新的Promise):var functionA = function () { //Prepare data for ajax service call return service.getDataA() .then((data) => $("#inputA").val(data)); } var functionB = function () { //Prepare data for ajax service call return service.getDataB() .then((data) => $("#inputB").val(data)); }用Promise.all等待所有任务完成后执行functionC
使用Promise.all监听两个Promise的状态,当全部完成后触发functionC:Promise.all([functionA(), functionB()]) .then(() => { // 两个请求完成、字段填充完毕,执行functionC functionC(); }) .catch((error) => { // 处理任意一个请求失败的情况(可选) console.error('请求失败:', error); });
如果项目依赖jQuery,也可以用$.when实现相同逻辑:
$.when(functionA(), functionB()) .done(function() { functionC(); }) .fail(function(error) { console.error('请求失败:', error); });
内容的提问来源于stack exchange,提问作者LUAN-I JACKSON
相关产品推荐
相关产品推荐

