Promises
What
are Promises
For java dev
Basic Concept
task (usually async) that can either succeed or fail
//We create a promise
const MyAwesomePromise = CreatePromise();
MyAwesomePromise
// if Success
.then((value)=>{
// We do something
})
// if Fail
.catch((err)=>{
// We handle the error
})
Some Code
- Promise states
- Then's
- Resolution procedure
Pyramid of doom
aka callback hell
var fs = require('fs');
var myFile = '/tmp/test';
fs.readFile(myFile, 'utf8', function(err, txt) {
if (err) return console.log(err);
txt = txt + '\nAppended something!';
fs.writeFile(myFile, txt, function(err) {
if(err) return console.log(err);
console.log('Appended text!');
});
});
Callbacks
var fs = require('fs');
function notifyUser(err) {
if(err) return console.log(err);
console.log('Appended text!');
};
function appendText(err, txt) {
if (err) return console.log(err);
txt = txt + '\nAppended something!';
fs.writeFile(myFile, txt, notifyUser);
}
var myFile = '/tmp/test';
fs.readFile(myFile, 'utf8', appendText);
Modularize with functions
var fs = require('fs');
var async = require('async');
var myFile = '/tmp/test';
async.waterfall([
function(callback) {
fs.readFile(myFile, 'utf8', callback);
},
function(txt, callback) {
txt = txt + '\nAppended something!';
fs.writeFile(myFile, txt, callback);
}
], function (err, result) {
if(err) return console.log(err);
console.log('Appended text!');
});
Use external libs (async.js)
var Promise = require('bluebird');
var fs = require('fs');
Promise.promisifyAll(fs);
var myFile = '/tmp/test';
fs.readFileAsync(myFile, 'utf8').then(function(txt) {
txt = txt + '\nAppended something!';
fs.writeFile(myFile, txt);
}).then(function() {
console.log('Appended text!');
}).catch(function(err) {
console.log(err);
});
Use Promises
const Promise = require('bluebird');
const fs = require('fs');
Promise.promisifyAll(fs);
const myFile = '/tmp/test';
fs.readFileAsync(myFile, 'utf8').then((txt) => {
txt = txt + '\nAppended something!';
fs.writeFile(myFile, txt);
}).then(() => {
console.log('Appended text!');
}).catch((err) => {
console.log(err);
});
Use Promises
var fs = require('fs');
var myFile = '/tmp/test';
fs.readFile(myFile, 'utf8', function(err, txt) {
if (err) return console.log(err);
txt = txt + '\nAppended something!';
fs.writeFile(myFile, txt, function(err) {
if(err) return console.log(err);
console.log('Appended text!');
});
});
async function getUser(id) {
if (id) {
return await db.user.byId(id);
} else {
throw 'Invalid ID!';
}
}
try {
let user = await getUser(123);
} catch(err) {
console.error(err);
}
Async/Await
deck
By César González González
deck
- 492