Open mateogianolio opened 8 years ago
Hey, continuing on the generator trail today we'll write a promise generator.
Let's create a function that will return a Promise.
Promise
var request = require('request'); function get(url) { return new Promise(function (resolve, reject) { request(url, function (error, response, body) { if (error || response.statusCode !== 200) return reject(); resolve(body); }); }); }
OK, so how do we use it?
get('http://en.wikipedia.org').then(function (body) { // resolved }, function () { // rejected });
Now, if we want to visit multiple urls the code quickly gets messy as hell. The solution? Generators.
function requester(urls) { return (function* () { for (var url of urls) yield get(url); }()); }
Usage:
var requests = requester([ 'https://en.wikipedia.org', 'https://en.wikipedia.org/wiki/Web_scraping' ]); for (var page of requests) { page.then(function (body) { // resolved }, function () { // rejected }); }
Looking for a practical implementation? Check out domp, a web scraper I wrote using this technique.
Cool!
Hey, continuing on the generator trail today we'll write a promise generator.
Let's create a function that will return a
Promise
.OK, so how do we use it?
Now, if we want to visit multiple urls the code quickly gets messy as hell. The solution? Generators.
Usage:
Looking for a practical implementation? Check out domp, a web scraper I wrote using this technique.