Skip to content

Instantly share code, notes, and snippets.

@gengen1988
Created December 1, 2014 09:32
Show Gist options
  • Save gengen1988/2bb15cbc523ac11f65e7 to your computer and use it in GitHub Desktop.
Save gengen1988/2bb15cbc523ac11f65e7 to your computer and use it in GitHub Desktop.
javascript async call example
var cheerio = require('cheerio');
var request = require('request');
var async = require('async');
var q = require('q');
var _ = require('underscore');
var testCase = [
'http://www.baidu.com',
'http://www.amazon.com',
'http://www.youku.com',
'http://www.github.com'
];
function getTitles(urls, callback) {
async.parallel(urls.map(function (url) {
return function (callback) {
request(url, function (err, res, body) {
var $ = cheerio.load(body);
callback(err, $('title').text());
});
};
}), callback);
}
function getTitles2(urls) {
return q.all(urls.map(function (url) {
return q.nfcall(request, url);
})).spread(function () {
return _.map(arguments, function (result) {
var $ = cheerio.load(result[1]);
return $('title').text();
});
});
}
function getTitles3(urls) {
var tasks = urls.map(function (url) {
var deferred = q.defer();
request(url, function (err, res, body) {
if (err) {
deferred.reject(err);
return;
}
deferred.resolve([res, body]);
});
return deferred.promise;
});
var promise = q.all(tasks);
promise.spread(function () {
var result = _.map(arguments, function (reply) {
var body = reply[1];
var $ = cheerio.load(body);
var title = $('title').text();
return title;
});
return result;
});
}
getTitles(testCase, function (err, result) {
console.log(result);
});
getTitles2(testCase).then(function (result) {
console.log(result);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment