Fetch API 支持通过AbortController/AbortSignal 对中断请求。调用AbortController.
abort()会中断所有网络传输,特别适合希望停止传输大型负载的情况。中断进行中的fetch()请求会
导致包含错误的拒绝。
let abortController = new AbortController();
fetch(‘wikipedia.zip’, { signal: abortController.signal })
.catch(() => console.log(‘aborted!’);
// 10 毫秒后中断请求
setTimeout(() => abortController.abort(), 10);
// 已经中断
Headers 对象
Headers 对象是所有外发请求和入站响应头部的容器。每个外发的Request 实例都包含一个空的
Headers 实例,可以通过Request.prototype.headers 访问,每个入站Response 实例也可以通过
Response.prototype.headers 访问包含着响应头部的Headers 对象。这两个属性都是可修改属性。
另外,使用new Headers()也可以创建一个新实例。
Headers 与Map 的相似之处
Headers 对象与Map 对象极为相似。这是合理的,因为HTTP 头部本质上是序列化后的键/值对,
它们的JavaScript 表示则是中间接口。Headers 与Map 类型都有get()、set()、has()和delete()
等实例方法,如下面的代码所示:
let h = new Headers();
let m = new Map();
// 设置键
h.set(‘foo’, ‘bar’);
m.set(‘foo’, ‘bar’);
// 检查键
console.log(h.has(‘foo’)); // true
console.log(m.has(‘foo’)); // true
console.log(h.has(‘qux’)); // false
console.log(m.has(‘qux’)); // false
// 获取值
console.log(h.get(‘foo’)); // bar
console.log(m.get(‘foo’)); // bar
// 更新值
h.set(‘foo’, ‘baz’);
m.set(‘foo’, ‘baz’);
// 取得更新的值
console.log(h.get(‘foo’)); // baz
console.log(m.get(‘foo’)); // baz
// 删除值
h.delete(‘foo’);
m.delete(‘foo’);
// 确定值已经删除
console.log(h.get(‘foo’)); // undefined
console.log(m.get(‘foo’)); // undefined
Headers 和Map 都可以使用一个可迭代对象来初始化,比如:
let seed = [[‘foo’, ‘bar’]];
let h = new Headers(seed);
let m = new Map(seed);
console.log(h.get(‘foo’)); // bar
console.log(m.get(‘foo’)); // bar
而且,它们也都有相同的keys()、values()和entries()迭代器接口:
let seed = [[‘foo’, ‘bar’], [‘baz’, ‘qux’]];
let h = new Headers(seed);
let m = new Map(seed);
console.log(…h.keys()); // foo, baz
console.log(…m.keys()); // foo, baz
console.log(…h.values()); // bar, qux
console.log(…m.values()); // bar, qux
console.log(…h.entries()); // [‘foo’, ‘bar’], [‘baz’, ‘qux’]
console.log(…m.entries()); // [‘foo’, ‘bar’], [‘baz’, ‘qux’]
03-29
314
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)