Skip to content

Instantly share code, notes, and snippets.

@k-fish
Created December 14, 2018 20:06
Show Gist options
  • Save k-fish/219b5d223a9c6e11298671845303fe20 to your computer and use it in GitHub Desktop.
Save k-fish/219b5d223a9c6e11298671845303fe20 to your computer and use it in GitHub Desktop.
Chaining promises
import Ember from 'ember';
const wait = (time) => new Promise(resolve => setTimeout(resolve, time));
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
actions: {
foo() {
this.set('firstResolved', false);
this.set('secondResolved', false);
this.set('finalResolved', false);
return wait(2000).then(() => {
this.set('firstResolved', true);
wait(2000).then(() => {
this.set('secondResolved', true);
});
}).then(() => {
this.set('finalResolved', true);
});
},
bar() {
this.set('firstResolved', false);
this.set('secondResolved', false);
this.set('finalResolved', false);
return wait(2000).then(() => {
this.set('firstResolved', true);
return wait(2000).then(() => {
this.set('secondResolved', true);
});
}).then(() => {
this.set('finalResolved', true);
});
}
}
});
body {
margin: 12px 16px;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 12pt;
}
.row {
margin: 10px;
padding: 10px;
border-radius: 10px;
border: 1px solid;
text-align: center;
}
.row:after {
content: ' '
}
.green {
background-color: hsl(120, 50%, 50%);
}
button {
padding: 20px;
}
<h1>Example of promise chaining</h1>
<br>
<br>
<div class="row {{if firstResolved 'green'}}">First Promise</div>
<div class="row {{if secondResolved 'green'}}">Second Promise</div>
<div class="row {{if finalResolved 'green'}}">Chained</div>
<br>
<br>
<button {{action 'foo'}}>Unchained</button>
<button {{action 'bar'}}>Chained</button>
{
"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