export let mapError = transform => broadcaster => listener => {
return broadcaster((value) => {
if (value instanceof Error) {
listener(transform(value))
return
}
listener(value)
})
}
let getUrl = url => listener => {
let controller = new AbortController()
let signal = controller.signal
fetch(url, {signal})
.then((response) => {
return response.json()
})
.then(listener)
.catch(listener)
return () => {
controller.abort()
}
}
let cancel = mapError(error => ({
login: error.message
}))(getUrl("https://api.github.com/users/xxx"))(console.log)
// cancel()