javascript基础从小白到高手系列二百三十三:Body.arrayBuffer()

有时候,可能需要以原始二进制格式查看和修改主体。为此,可以使用Body.arrayBuffer()将
主体内容转换为ArrayBuffer 实例。Body.arrayBuffer()方法返回期约,解决为将缓冲区转存得到
的ArrayBuffer 实例。下面的代码展示了在Response 对象上使用Body.arrayBuffer():
fetch(‘https://foo.com’)
.then((response) => response.arrayBuffer())
.then(console.log);
// ArrayBuffer(…) {}
以下代码展示了在Request 对象上使用Body.arrayBuffer():
let request = new Request(‘https://foo.com’,
{ method:‘POST’, body: ‘abcdefg’ });
// 以整数形式打印二进制编码的字符串
request.arrayBuffer()
.then((buf) => console.log(new Int8Array(buf)));
// Int8Array(7) [97, 98, 99, 100, 101, 102, 103]
5. Body.blob()
有时候,可能需要以原始二进制格式使用主体,不用查看和修改。为此,可以使用Body.blob()
将主体内容转换为Blob 实例。Body.blob()方法返回期约,解决为将缓冲区转存得到的Blob 实例。
下面的代码展示了在Response 对象上使用Body.blob():
fetch(‘https://foo.com’)
.then((response) => response.blob())
.then(console.log);
// Blob(…) {size:…, type: “…”}
以下代码展示了在Request 对象上使用Body.blob():
let request = new Request(‘https://foo.com’,
{ method:‘POST’, body: ‘abcdefg’ });
request.blob()
.then(console.log);
// Blob(7) {size: 7, type: “text/plain;charset=utf-8”}
6. 一次性流
因为Body 混入是构建在ReadableStream 之上的,所以主体流只能使用一次。这意味着所有主
体混入方法都只能调用一次,再次调用就会抛出错误。
fetch(‘https://foo.com’)
.then((response) => response.blob().then(() => response.blob()));
// TypeError: Failed to execute ‘blob’ on ‘Response’: body stream is locked
let request = new Request(‘https://foo.com’,
{ method: ‘POST’, body: ‘foobar’ });
request.blob().then(() => request.blob());
// TypeError: Failed to execute ‘blob’ on ‘Request’: body stream is locked
即使是在读取流的过程中,所有这些方法也会在它们被调用时给ReadableStream 加锁,以阻止
其他读取器访问:
fetch(‘https://foo.com’)
.then((response) => {
response.blob(); // 第一次调用给流加锁
response.blob(); // 第二次调用再次加锁会失败
});
// TypeError: Failed to execute ‘blob’ on ‘Response’: body stream is locked
let request = new Request(‘https://foo.com’,
{ method: ‘POST’, body: ‘foobar’ });
request.blob(); // 第一次调用给流加锁
request.blob(); // 第二次调用再次加锁会失败
// TypeError: Failed to execute ‘blob’ on ‘Request’: body stream is locked
作为Body 混入的一部分,bodyUsed 布尔值属性表示ReadableStream 是否已摄受(disturbed),
意思是读取器是否已经在流上加了锁。这不一定表示流已经被完全读取。下面的代码演示了这个属性:
let request = new Request(‘https://foo.com’,
{ method: ‘POST’, body: ‘foobar’ });
let response = new Response(‘foobar’);
console.log(request.bodyUsed); // false
console.log(response.bodyUsed); // false
request.text().then(console.log); // foobar
response.text().then(console.log); // foobar
console.log(request.bodyUsed); // true
console.log(response.bodyUsed); // true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值