How to use Promise.coroutine in node.js

Promise.coroutine is handy when it comes to you have multiple promises and one promise uses result from another promise.

Here is an example:

var sendEmailForUploadId = Promise.coroutine(function* (uploadId) {

var filemetas = yield Filemeta.find({ uploadId });
var bpInfo = yield BpInfo.findOne({ uploadId });
var info = { bpInfo, filemetas, HOST };
var template = yield generateTemplateWithInfo(info);

try {
yield sendEmail(template, sendToEmail);
} catch (e) {
throw e;
}

});

We use yield for function that return a promise. At the end, we have a try-catch block so that this function can propagate the error to the promise that use this whole function. I mean the function that use this promise can handle the error.