梦魇循环

时间:2017-12-03 23:55:17

标签: node.js nightmare

您好,我正在编写一个应用程序,我需要能够遍历一组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内完成了。它会在点击yield nightmare

内的then后停止投放
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;
  }
});

以上代码是我试图做的。如果有人有任何想法,那将是一个巨大的帮助,谢谢你!

1 个答案:

答案 0 :(得分:0)

也许试试这个:

var urls = ['http://example.com', 'http://example2.com', 'http://example3.com'];

var results = [];
urls.forEach(function(url) {
  nightmare.goto(url)
    .wait('body')
    .title()
    .then(function(result) {
      results.push(result);
    });
});
console.dir(results)

来源:https://github.com/rosshinkley/nightmare-examples/blob/master/docs/common-pitfalls/async-operations-loops.md