response.text() 返回 Promise,需 await 或 .then() 解包;调用后响应体被消耗,不可重复读取;中文乱码需检查 Content-Type charset;大文本应避免直接使用 text(),改用流式处理。
response.text() 返回的是 Promise,不是字符串
调用
后拿到的永远是一个
,不是立即可用的文本。直接打印或赋值给字符串变量会看到
—— 这是最常见的误用起点。
必须用
或
解包:
如果在非 async 函数里用,就得写成:
text() 会消费响应体,不可重复调用
、
、
都属于“读取方法”,它们会把响应流消耗掉。一旦调用过
,再调用一次就会得到空字符串,再调
则抛错
。
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
只选一个读取方法,按需使用
若需多种格式(比如既要 log 又要解析),应先用
复制响应对象
必须在任何读取方法调用前执行
中文乱码?检查 Content-Type 响应头中的 charset
浏览器默认按 UTF-8 解码
,但如果服务端返回的
是
且没带
,而实际内容是 UTF-8 编码,某些旧环境(如部分 Electron 版本或 IE 兼容模式)可能误判为 ISO-8859-1,导致中文变问号或乱码。
优先让后端设置响应头:
前端无法改服务端时,可手动解码(不推荐,仅应急):先用
,再用
大文本响应下 text() 可能阻塞主线程
是全量加载并解码整个响应体到内存,对几 MB 以上的纯文本(如日志文件、CSV 内容),会造成明显卡顿,甚至触发浏览器内存警告。
确认是否真需要全部加载:能否用流式处理(
+
)逐块读?
服务端支持的话,优先用分页、limit 参数控制返回体积
Node.js 环境无此问题;但浏览器中,尤其移动端,2MB+ 文本建议评估替代方案
流式读取示例(简化):
真正的大文本场景,别只盯着
—— 它方便,但不是万能解药。
response.text()Promise[object Promise]await.then()const response = await fetch('/api/log');
const text = await response.text(); // ✅ 正确:等待 Promise resolve
console.log(text); // 真实的纯文本内容fetch('/api/log')
.then(res => res.text())
.then(text => console.log(text));response.text()response.json()response.blob()response.text()response.json()TypeError: Failed to execute 'json' on 'Response': body stream is lockedresponse.clone()response.clone()const response = await fetch('/data');
const text = await response.text(); // 消耗原始响应
const json = await response.clone().json(); // 克隆后读取 JSONtext()Content-Typetext/plaincharset=utf-8Content-Type: text/plain; charset=utf-8response.arrayBuffer()TextDecoderconst buffer = await response.arrayBuffer();
const text = new TextDecoder('utf-8').decode(buffer); // 绕过自动 charset 推断response.text()response.bodyReadableStreamconst reader = response.body.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = new TextDecoder().decode(value);
console.log('chunk:', chunk);
}text()