Skip to content

Instantly share code, notes, and snippets.

@ZhihaoLau
Forked from jish/promise.js
Created February 21, 2017 03:24
Show Gist options
  • Save ZhihaoLau/cc6afd8eb265dfedd9a6fc9d07194534 to your computer and use it in GitHub Desktop.
Save ZhihaoLau/cc6afd8eb265dfedd9a6fc9d07194534 to your computer and use it in GitHub Desktop.
An example "always" behavior for ES6 promises. This only works if you do not create / return intermediate promises.
// A thing I want to do
// This flow only involves **one** promise, for example an ajax call
// None of the subsequent `then` or `catch` calls, return new promises.
var explode = false;
var promise = new Promise(function(resolve, reject) {
if (explode) {
reject();
} else {
resolve();
}
}).then(function() {
console.log('Thing is done. Do followup task.');
return 'my argument';
}).then(function(arg1) {
console.log('Thing is done. Do followup task 2. argument: ' + arg1);
}).catch(function() {
console.log('Thing failed');
}).then(function() {
console.log('Always do this');
});
// => "Thing is done. Do followup task."
// => "Thing is done. Do followup task 2. argument: my argument"
// => "Always do this"
// Set explode to true
var explode = true;
var promise = new Promise(function(resolve, reject) {
if (explode) {
reject();
} else {
resolve();
}
}).then(function() {
console.log('Thing is done. Do followup task.');
return 'my argument';
}).then(function(arg1) {
console.log('Thing is done. Do followup task 2. argument: ' + arg1);
}).catch(function() {
console.log('Thing failed');
}).then(function() {
console.log('Always do this');
});
// => "Thing failed"
// => "Always do this"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment