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

JavaScript:点击按钮后如何获取async函数的返回值并打印?

解决方案

方法一:用.then()处理Promise结果

async函数默认返回Promise对象,你可以通过.then()方法提取它最终resolve的值:

const btn = document.querySelector("button");
const getDadJoke = async () => {
    const config = { headers: { Accept: "application/json" } }
    // 给res添加const声明,避免全局变量污染
    const res = await axios.get("https://icanhazdadjoke.com", config);
    return res.data.joke;
}

btn.addEventListener("click", () => {
    getDadJoke().then(joke => {
        console.log(joke);
    });
})

方法二:将事件回调改为async函数,用await等待结果

事件监听的回调可以是async函数,这样就能直接在内部用await获取getDadJoke()的返回值:

const btn = document.querySelector("button");
const getDadJoke = async () => {
    const config = { headers: { Accept: "application/json" } }
    const res = await axios.get("https://icanhazdadjoke.com", config);
    return res.data.joke;
}

btn.addEventListener("click", async () => {
    const joke = await getDadJoke();
    console.log(joke);
})

关于你第二次尝试的修正

你第二次的代码除了没调用getDadJoke(),还有异步时序问题:网络请求是异步操作,直接打印text会在请求完成前执行,拿到的还是初始值。修正后可以这样写:

const btn = document.querySelector("button");
let text = "original text"

const getDadJoke = async () => {
    const config = { headers: { Accept: "application/json" } }
    const res = await axios.get("https://icanhazdadjoke.com", config);
    text = res.data.joke;
}

btn.addEventListener("click", async () => {
    await getDadJoke(); // 等待请求完成,确保text已更新
    console.log(text);
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:55:28