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
相关产品推荐
相关产品推荐

