You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保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链,导致外部无法追踪它们的完成状态。只需两步即可解决:

  1. 让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));
    }
    
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:27:12