【发布时间】:2016-12-25 13:34:09
【问题描述】:
var a = [[1,2,3],[4,5,6],[7,8,9]]
var b = []
a.forEach(function(item) {
item.forEach(function(it) {
setTimeout(function () {
b.push(it)
}, 1000);
})
})
console.log(b);
使用 Promise 还是 Generate? 我试过了,但是 b = [], 不是 b = [1,2,3,4,5,6,7,8,9]
var url = 'http://www.imooc.com/learn/348'
function getLinks(url){
var link_arry = []
request(url, function (error, response, body) {
var $ = cheerio.load(body)
var chapters = $('.chapter')
var courseName = $('.path').find('span').text()
chapters.each(function (item) {
var chapter = $(this)
var chapterTitle = chapter.find('strong').text()
var videos = chapter.find('li')
videos.each(function (item) {
var video = $(this).find('.studyvideo')
var videoTitle = video.text().trim().replace(/[\r\n]/g, '')
var id = video.attr('href').split('video/')[1]
link_arry.push(id)
})
})
})
return link_arry
}
使用请求获取包含课程、部分章节、部分教派的网页 当我使用 return link_arry 时,总是得到一个空数组 所以...
想要link_arry
【问题讨论】:
-
为什么
b不能为空?您将所有这些调用延迟 1 秒,因此console.log(b)将在任何这些超时有机会实际超时之前执行。 -
您实际上想要完成什么?如果您只想合并数组,为什么要超时?如果您要演示一些更复杂的需求,那是什么需求?
-
出于某种原因,我不仅要合并数组,还要更新一些细节
标签: javascript node.js generator es6-promise