'use strict' const express = require('express'); const app = express(); const Promise = require('bluebird'); const {coroutine: co} = require('bluebird'); //Alias coroutine app.listen(3000, function () { console.log('Example app listening on port 3000!') }) app.get('/', (req, res)=>{ console.log('hit') //Create the self invoking function co(function* () { try { let _first = yield first(); let _second = yield second(); let _final = yield putittogether(_first, _second); //Respond res.json(_final); } catch(e) { //If there was a rejection we will catch it here. res.json(e); } })(); }) function first() { return new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve(1); }, 2000) }) } function second() { return new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve(2); }, 1) }) } function putittogether(first, second) { return new Promise((resolve, reject)=>{ resolve(first + second); }) }