20 lines
497 B
JavaScript
20 lines
497 B
JavaScript
|
|
export default function makeCancelable(thenable) {
|
||
|
|
let isCanceled = false;
|
||
|
|
const promise = Promise.resolve(thenable).then(
|
||
|
|
function(result) {
|
||
|
|
if (isCanceled) throw Object.freeze({ isCanceled });
|
||
|
|
return result;
|
||
|
|
},
|
||
|
|
function(error) {
|
||
|
|
if (isCanceled) throw Object.freeze({ isCanceled, error });
|
||
|
|
throw error;
|
||
|
|
}
|
||
|
|
);
|
||
|
|
return Object.assign(Object.create(promise), {
|
||
|
|
then: promise.then.bind(promise),
|
||
|
|
cancel() {
|
||
|
|
isCanceled = true;
|
||
|
|
},
|
||
|
|
});
|
||
|
|
}
|