javascript – nodejs async嵌套调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – nodejs async嵌套调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1681字,纯文字阅读大概需要3分钟。
内容图文
我想废弃一个网址:
1请求获取元素列表
每个结果1个请求以获取详细信息
在这里我有:
var request = require('request')
, cheerio = require('cheerio')
, async = require('async')
, format = require('util').format;
var baseurl = 'http://magiccards.info';
async.waterfall([
function (callback) {
request(baseurl + '/sitemap.html', function (err, response, body) {
var sets = [];
var $= cheerio.load(body);
$('a[href$="/en.html"]').each(function () {
sets.push({"name": $(this).text(), "code":$(this).attr('href').match(/\/([^)]+)\//)[1], "path": $(this).attr('href'), "translations":[]});
});
callback(null, sets);
});
},
function (sets, callback) {
console.log(sets);
async.eachSeries(sets, function (set, callback) {
console.log('SET ' + set.code.toUpperCase());
request(baseurl + set.path, function (err, response, body) {
var $= cheerio.load(body);
$('body > a[href^="/' + set.code + '/"]').each(function () {
console.log(' %s (%s)', $(this).text(), $(this).attr('href'));
});
});
});
}
], function (err, result) {
console.log('ERR');
// result now equals 'done'
});
问题是第二个瀑布函数只运行一次,如果我用each替换eachSeries,循环确实运行X次(但我需要等待结果).
我错过了什么?
解决方法:
您需要调用eachSeries回调函数.否则异步将不知道你已经完成了. (1)
您还需要通过调用回调函数告诉瀑布函数您已完成该步骤. (2)
function (sets, waterfallCallback) {
async.eachSeries(sets, function (set, seriesCallback) {
console.log('SET ' + set.code.toUpperCase());
request(baseurl + set.path, function (err, response, body) {
var $= cheerio.load(body);
$('body > a[href^="/' + set.code + '/"]').each(function () {
console.log(' %s (%s)', $(this).text(), $(this).attr('href'));
});
seriesCallback(null); /* 1 */
});
}, waterfallCallback /* 2 */);
}
内容总结
以上是互联网集市为您收集整理的javascript – nodejs async嵌套调用全部内容,希望文章能够帮你解决javascript – nodejs async嵌套调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。