Created
December 1, 2014 09:32
-
-
Save gengen1988/2bb15cbc523ac11f65e7 to your computer and use it in GitHub Desktop.
javascript async call example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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