let getUrl = url => listener => { let controller = new AbortController() let signal = controller.signal fetch(url, {signal}) .then((response) => { return response.json() }).then(listener) return () => { controller.abort() } } let cancel = getUrl("https://api.github.com/users/zhentian-wan")(console.log) cancel()