gpt4 book ai didi

javascript - Fetch API 中的请求信号属性

转载 作者:行者123 更新时间:2023-12-05 05:01:52 33 4
gpt4 key购买 nike

从引用资料中可以看出,Request实例具有 signal 属性:

request . signal

Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler.

此代码段显示 req.signal.abortedfalse,即使在请求已中止之后也是如此:

let req = new Request('/');
req.signal.onabort = () => console.log('abort'); // no output
let ctrl = new AbortController();
fetch(req, { signal: ctrl.signal })
.catch(() => console.log(req.signal.aborted)); // outputs false
ctrl.abort();

结果与模拟连接问题(net::ERR_INTERNET_DISCONNECTED)相同。

暴露默认 req.signal 的实际原因是什么?重新分配的 req.signal 请求的行为是否会有所不同?

req.signal请求信号如何中止,即触发onabort回调并将req.signal设置为true?

我对 native Fetch API 实现的内部工作方式很感兴趣,没有需要解决的特定代码问题。

最佳答案

This snippet shows that req.signal.aborted is false even after a request has been aborted.

是的。那是因为req不是中止的请求,而是fetch()内部构造的请求。

相反,写

let ctrl = new AbortController();
let req = new Request('/', { signal: ctrl.signal });
req.signal.onabort = () => console.log('abort'); // will log
fetch(req).catch(() => console.log(req.signal.aborted)); // outputs true
ctrl.abort();

此处使用 new Request 构造函数创建的 req.signal 确实遵循 Controller 的中止信号。

关于javascript - Fetch API 中的请求信号属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62519444/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com