【发布时间】:2017-12-13 02:24:50
【问题描述】:
你好,我正在编写一个应用程序,我需要能够遍历一组 url。我知道有一个如何做到这一点的例子,但我的问题有点不同,我会用一些代码来解释。
nightmare
.goto('some url')
.evaluate(() => {
//evaluate code
})
.then(dataArray => {
var innerRun = function* () {
var returnData = [];
for (var i = 0; i < dataArray.length; i++) {
var item = dataArray[i];
yield nightmare
.goto(item.url)
.evaluate(function () {
return false;
})
.screenshot(item.imgPath)
returnData.push(item);
}
return returnData;
}
vo(innerRun)(function (err, ads) {
if (err) {
console.log("Error running", err)
return;
}
});
});
我希望能够通过使用 url 数组来循环该代码。我相信我在实现这一点时遇到了问题,因为我已经在then 中这样做了。一旦碰到then 内的yield nightmare,它将停止运行
var mainLoop = function* () {
for (var j = 0; j < urlArray.length; j++) {
var url = urlArray[j];
yield nightmare.goto(url)//same code as in example above
}
}
vo(mainLoop)(function (err, d) {
if (err) {
console.log("Error running", err)
return;
}
});
上面的代码是我试图做的。如果有人有任何想法,那将是一个巨大的帮助,谢谢!
【问题讨论】:
-
运行所有这些请求有什么要求?你想一个接一个地连续运行它们。尽可能多地并行?全部并行?而且,期望的最终结果是什么?一组快照?如果您在途中遇到错误,您想怎么做 - 停止并报告错误,跳过错误并继续其他错误?
-
如果可能的话,我希望尽可能多地并行运行。由于噩梦实例,我认为您需要一个接一个地执行,但是如果它们可以并行运行,那就太好了。最终结果是保存快照并记录
vo(innerRun)返回的 innerData 数组。如果出现错误,我想记录此错误,但请继续。