Skip to content

Instantly share code, notes, and snippets.

@seanjohnson08
Created February 19, 2019 13:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seanjohnson08/b8d7c088b00b16bc0fb57b2371d27c02 to your computer and use it in GitHub Desktop.
Save seanjohnson08/b8d7c088b00b16bc0fb57b2371d27c02 to your computer and use it in GitHub Desktop.
New Twiddle
import Ember from 'ember';
class AbortError extends Error {
}
function makeAbortable(promise) {
const abortController = new AbortController();
const _promise = promise
.then(result => {
if (abortController.signal.aborted) {
throw new AbortError;
} else {
return result;
}
});
return {
promise: _promise,
abort: () => abortController.abort()
};
}
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
abortDisabled: true,
actions: {
firePromise() {
this.set('abortDisabled', false);
const myPromise = new Ember.RSVP.Promise((resolve, reject) => {
setTimeout(() => resolve('Hello!'), 2000);
});
const { promise, abort } = makeAbortable(myPromise);
promise.then(
result => alert(result),
err => {
if (err instanceof AbortError) {
alert('Aborted!');
}
}
)
.finally(() => this.set('abortDisabled', true));
this.set('abort', abort);
},
abort() {
this.get('abort')();
}
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
<button {{action "firePromise"}}>Fire Promise in 2s</button><br />
<button {{action "abort"}} disabled={{abortDisabled}}>Abort Promise</button>
<br>
<br>
{
"version": "0.15.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js",
"ember": "3.4.3",
"ember-template-compiler": "3.4.3",
"ember-testing": "3.4.3"
},
"addons": {
"ember-data": "3.4.2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment