You can easily sequence requests using Promises
// Load Dependencies:
var Promise = require('promise');
var request = require('request');
// Begin Execution:
main();
function main() {
getData() //Executes 1st
.then(updateData) //Whatever is 'fulfilled' in the previous method, gets passed to this function updateData
.then(sendNotification) //Whatever is fulfilled in the previoud method, gets passed to this function sendNotification.
.catch(function(err) {
console.log('If reject is called, this will catch it - ' +err);
});
}
// Request #1:
function getData() {
return new Promise(function(fulfill, reject) {
request({}, function(err, res, body) {
if (err) {
reject('Error making request - ' +err);
} else if (res.statusCode !== 200) {
reject('Invalid API response - ' +body);
} else {
fulfill(body);
}
});
});
}
// Request #2:
function updateData(data) {
return new Promise(function(fulfill, reject) {
request({}, function(err, res, body) {
if (err) {
reject('Error making request - ' +err);
} else if (res.statusCode !== 200) {
reject('Invalid API response - ' +body);
} else {
fulfill(body);
}
});
});
}
// Request #3
function sendNotification(phoneNumber, email) {
return new Promise(function(fulfill, reject) {
request({}, function(err, res, body) {
if (err) {
reject('Error making request - ' +err);
} else if (res.statusCode !== 200) {
reject('Invalid API response - ' +body);
} else {
fulfill(body);
}
});
});
}
So basically just wrap your async functions with return new Promise, to return the ready data via fulfill or reject. In function main(), you can see how the sequence for this order has been easily defined.