我试图在使用Fetch API向服务器发出每个请求后运行一些简单的JS函数。我已经搜索了这个问题的答案,但是没有找到任何答案,可能是因为Fetch API是相对较新的。
我一直用XMLHttpRequest
这样做:
(function () {
var origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function () {
this.addEventListener('load', function () {
someFunctionToDoSomething();
});
origOpen.apply(this, arguments);
};
})();
很高兴知道是否有办法使用Fetch API完成同样的全局事务。
答案 0 :(得分:9)
由于fetch
会返回一个承诺,您可以通过覆盖fetch
将自己插入承诺链中:
(function () {
var originalFetch = fetch;
fetch = function() {
return originalFetch.apply(this, arguments).then(function(data) {
someFunctionToDoSomething();
return data;
});
};
})();
Example on jsFiddle (因为Stack Snippets不具备方便的ajax功能)
答案 1 :(得分:4)
就像您可以覆盖open
方法一样,您也可以使用拦截方法覆盖全局fetch
方法:
fetch = (function (origFetch) {
return function myFetch(req) {
var result = origFetch.apply(this, arguments);
result.then(someFunctionToDoSomething);
return result; // or return the result of the `then` call
};
})(fetch);