如何在每次获取 api 请求和响应之前和之后调用特定函数
How to call a specific function before and after every fetch api request and response
我想在发送请求期间以及在使用 Vanilla JS 的每个 fetch() 函数收到响应后调用一个函数。
我看到 jquery ajax 正在提供某种 $.ajax 设置来执行此操作,但我想使用 Vanilla JS 来执行此操作。
提前致谢。
fetch
没有这样的功能。不过,您可以编写一个包装函数:
const myFetch = async (...args) => {
do_before();
const result = await fetch(...args);
do_after();
return result;
}
然后调用该函数而不是直接访问 fetch
。
您可以通过重写获取函数来实现
// First rename original fetch function
window.originalFetch = window.fetch
// Then override fetch function with your new function
window.fetch = async (... args) => {
console.log("before");
// call the renamed fetch function
const result = await window.originalFetch(...args);
console.log("after");
return result;
}
// Then you can use it
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
解释:
首先,你改变原来的函数名,
然后你编写自己的同名函数“fetch”
感谢@Quentin从他的回答中复制的一些代码
我想在发送请求期间以及在使用 Vanilla JS 的每个 fetch() 函数收到响应后调用一个函数。 我看到 jquery ajax 正在提供某种 $.ajax 设置来执行此操作,但我想使用 Vanilla JS 来执行此操作。 提前致谢。
fetch
没有这样的功能。不过,您可以编写一个包装函数:
const myFetch = async (...args) => {
do_before();
const result = await fetch(...args);
do_after();
return result;
}
然后调用该函数而不是直接访问 fetch
。
您可以通过重写获取函数来实现
// First rename original fetch function
window.originalFetch = window.fetch
// Then override fetch function with your new function
window.fetch = async (... args) => {
console.log("before");
// call the renamed fetch function
const result = await window.originalFetch(...args);
console.log("after");
return result;
}
// Then you can use it
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
解释:
首先,你改变原来的函数名, 然后你编写自己的同名函数“fetch”
感谢@Quentin从他的回答中复制的一些代码