为什么我的递归功能不会从承诺中被调用?

时间:2018-06-01 01:34:30

标签: javascript promise nightmare

无论我做什么,我都无法通过递归方式调用我的函数。我尝试过返回并存储到变量和其他许多东西中,但它只被调用一次?

 var scrape = () => {
    var waitTime = randomIntFromInterval(1000, 10000);

    nightmare.goto('http://...') 
      .wait(waitTime)
      .evaluate(() => {
        var data = [];
        // ... doing work to get data from browser here
        return data
      })
      .end()
      .then((result) => {
        console.log('scraped successfully!' + new Date());
        scrape();
      }
    )
  }

  scrape();

我认为最后的.then()意味着承诺已经完成且已成功?

更新

似乎删除.end()已解决了我的问题。我并不完全理解噩梦文档https://github.com/segmentio/nightmare,它说它完成了任何队列操作。我从示例中提取了一些代码,其中有end()。我是否会因删除此内容而遇到任何影响?

2 个答案:

答案 0 :(得分:0)

你能试试这个流程,

var scrape = () => {
var waitTime = randomIntFromInterval(1000, 10000);

nightmare.goto('http://...') 

  .then((result) => {
    console.log('scraped successfully!' + new Date());

    ////do the end process here////

    scrape();
  }
  )
 }

 scrape();

答案 1 :(得分:0)

在您的网址末尾添加伪随机哈希,例如#' + new Date().getTime()。如果这对您有用,那么您可能会遇到this issue,其中使用噩梦.goTo()导航到相同的网址会导致无操作。