ui/lib/shared/addon/utils/stateful-promise.js

32 lines
653 B
JavaScript

import { setProperties } from '@ember/object';
import RSVP from 'rsvp';
export default class StatefulPromise {
static wrap(target, defaultValue) {
const promise = RSVP.resolve(target);
setProperties(promise, {
loading: true,
loaded: false,
error: false,
value: defaultValue
});
promise.then((value) => {
setProperties(promise, {
loading: false,
loaded: true,
value
});
}, (errorValue) => {
setProperties(promise, {
loading: false,
error: true,
value: defaultValue,
errorValue
});
});
return promise;
}
}