async遍历的时候怎么延迟执行呢
在node中使用,用npm安装了async;
我先说一下流程,我首先遍历获取一个url数组
http://w/page/1
http://w/page/2
http://w/page/3
http://w/page/4
在遍历这个数组,每个url又会生成一个数组,
[http://w/998.html,
http://w/997.html,
http://w/996.html,
http://w/995.html,
http://w/994.html,
http://w/993.html,
http://w/992.html,
http://w/991.html,
http://w/990.html,
http://w/989.html]...
然后遍历数组里面每个url
下面我用伪码描述一下
for (var i = 1; i < 3; i++) {
ihx.push('http://w/page/' + i);
}
self.ihx(ihx);
ihx: function (arr) {
var self = this;
async.each(arr, function (item, callback) {
setTimeout(function () {
console.log(item)
self.core(item, function ($) {
var $itemlist = $('.post-listing .item-list');
var linkList = $itemlist.map(function (idx, element) {
var $element = $(element).find('.post-title a');
return $element.attr('href');
}).get();
console.log("linkList===" + linkList)
async.each(linkList, function (item, callback2) {
setTimeout(function () {
self.core(item, function ($) {
var author = $('.post-inner .entry').find('p').eq(0).text();
var content = $.html('.article_text');
var text = $('.post-inner span[itemprop="name"]').text();
console.log("text=" + text);
if (!!text) {
var thor = new articlema({
title: text,
author: author,
category: '002',
content: content
});
thor.save(function (err, thor) {
if (err) return console.log(err);
//console.log(thor);
});
}
});
}, 2000)
}, function (err) {
console.log("content==============" + err);
});
})
}, 1000)
}, function (err) {
console.log("item==============" + err);
})
}
这个没有达到我想的结果 console.log(linkList),是先打印的page/2页面抓取的url,时间也没有慢下来,并且外面的循环完了,才会循环里面的,这个我应该怎么改一下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你不应该用async.each而应该用async.eachSeries来控制。
另外你node使用,我建议抛弃async,换用生成器+promise的写法,毕竟node.js都5.0了,有ES6不用太奇怪了。
先定义几个帮助的函数
然后再重写你的业务逻辑,注意异步的部分要包裹成Promise
你看这样是不是业务逻辑更清晰了呢?
自己控制每个异步操作的执行