JavaScript使用await读取文本文件仅返回Pending Promise的问题
问题原因与解决方案
你这段代码的核心问题是:所有async函数的返回值本质都是Promise对象——哪怕你在函数内部return了普通文本,它也会被自动包装成一个resolved状态的Promise。你直接将load(source_text_path)赋值给source_text,拿到的自然是还未完成的pending状态Promise,而非最终的文本内容。
解决方法一:在async函数内用await调用
因为await只能在async函数内部使用,所以可以封装一个入口函数:
async function loadAndLog() { try { var source_text = await load(source_text_path); console.log(source_text); } catch (err) { // 这里可以额外处理上层错误,或者依赖load函数内部的catch console.error('加载失败:', err); } } loadAndLog();
解决方法二:用Promise的.then()方法处理结果
直接通过Promise的回调获取resolved后的内容:
load(source_text_path).then(source_text => { console.log(source_text); }).catch(err => { // 可选:额外处理错误 console.error('加载失败:', err); });
额外方案:顶级await(浏览器环境)
如果是在浏览器的模块脚本中(需要给script标签加上type="module"),可以直接使用顶级await:
<script type="module"> async function load(path) { try { const response = await fetch(path); const text = await response.text(); return text; } catch (err) { console.error(err); } } var source_text = await load(source_text_path); console.log(source_text); </script>
内容的提问来源于stack exchange,提问作者Thomas Nicholson
相关产品推荐
相关产品推荐

