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

为何.then()未等待async函数的Promise完成就执行?

问题原因分析
  1. async函数返回值逻辑错误:你的async function A()内部没有返回异步操作的Promise实例。async函数如果没有显式返回值,会默认返回一个已resolve的Promise,其值为undefined,所以A().then()会立刻执行,直接拿到undefined。
  2. done回调的return无效:jQuery.get().done()回调里的return只是该回调函数的返回值,和A函数的返回值完全无关,无法传递给A函数的调用者。
  3. jQuery.get的特性未利用:jQuery的$.get返回的是一个兼容Promise规范的Deferred对象,你需要把这个对象作为A函数的返回值,才能让A()的then方法等待异步请求完成。

另外,原代码存在逻辑bug:result.indexOf("Example")的判断逻辑有误——indexOf找不到目标字符串时返回-1,找到时返回索引(可能为0),而if (0)会被判定为false,导致明明找到字符串却进入Fail分支,正确判断应为result.indexOf("Example") !== -1。

修正方案

方案1:返回jQuery.get的Promise并通过then处理结果

async function A(){     
  return jQuery.get("example.com").then(function(result){
    if (result.indexOf("Example") !== -1){
      console.log("success");
      return 1;
    } else {
      console.log("Fail");
      return -1;
    }
  })
}

function B(){
  A().then(function(result){
    console.log("Res:" + result);
  })
}

B();

方案2:用await等待异步请求完成(更贴合async/await语法)

async function A(){     
  const result = await jQuery.get("example.com");
  if (result.indexOf("Example") !== -1){
    console.log("success");
    return 1;
  } else {
    console.log("Fail");
    return -1;
  }
}

function B(){
  A().then(function(result){
    console.log("Res:" + result);
  })
}

B();

两种方案都会让A().then()等待请求完成后再执行,输出顺序变为:

success
Res:1

内容的提问来源于stack exchange,提问作者Gbr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:09:48