diff --git a/packages/react-async/src/reducer.js b/packages/react-async/src/reducer.js index 3587bcdf..c377b486 100644 --- a/packages/react-async/src/reducer.js +++ b/packages/react-async/src/reducer.js @@ -1,25 +1,26 @@ import { getInitialStatus, getIdleStatus, getStatusProps, statusTypes } from "./status" // This exists to make sure we don't hold any references to user-provided functions -class NeverSettle extends Promise { - constructor() { - super(() => {}, () => {}) - /* istanbul ignore next */ - if (Object.setPrototypeOf) { - // Not available in IE 10, but can be polyfilled - Object.setPrototypeOf(this, NeverSettle.prototype) - } - } +// The way NeverSettle extends from Promise is complicated, but can't be done differently because Babel doesn't support +// extending built-in classes. See https://babeljs.io/docs/en/caveats/#classes +function NeverSettle() {} +/* istanbul ignore next */ +if (Object.setPrototypeOf) { + Object.setPrototypeOf(NeverSettle, Promise) +} else { + NeverSettle.__proto__ = Promise +} +NeverSettle.prototype = Object.assign(Object.create(Promise.prototype), { finally() { return this - } + }, catch() { return this - } + }, then() { return this - } -} + }, +}) export const neverSettle = new NeverSettle()