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

JS调用async异步函数返回[object Promise]报错如何解决?

问题根因

所有async函数的返回值默认是Promise对象,你在非异步的uploadQuote函数中直接将selectAndReturnRandomQuote()的返回值赋值给innerHTML,此时拿到的是未执行完成的Promise实例,自然会渲染出[object Promise]文本。

修复方案

将uploadQuote改为异步函数,等待selectAndReturnRandomQuote执行完成拿到实际返回的字符串后,再赋值给DOM节点的innerHTML即可。
可额外补充对author字段为空的兜底处理,避免出现null显示的问题,修改后的完整JS代码如下:

"use strict";

async function selectAndReturnRandomQuote() {
    let quotesFromJSON = await loadQuotesFromJSON();
    let quote = quotesFromJSON[Math.floor(Math.random() * quotesFromJSON.length)];
    // 补充作者为空时的兜底展示
    let author = quote.author || '佚名';
    let result = "Quote of the day: " + quote.text + " by " + author;
    return result;
}

// 改为async异步函数
async function uploadQuote(){
    // 等待异步方法执行完成拿到实际的名言字符串
    const quoteStr = await selectAndReturnRandomQuote();
    document.getElementById('randomeQuotes').innerHTML = quoteStr;
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
  
async function setLoader() {
    document.getElementById('randomeQuotes').innerHTML = "<img src='loader2.gif' width='28px' height='55px' alt='加载中'>";
    await sleep(1000);  
    await uploadQuote();
}
  
setLoader();

async function loadQuotesFromJSON() {
    const response = await fetch('https://type.fit/api/quotes');
    return response.json();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:45:04