Почему моя рекурсивная функция не будет вызвана из обещания? - PullRequest
0 голосов
/ 01 июня 2018

Я не могу заставить мою функцию вызываться рекурсивно, независимо от того, что я делаю.Я пытался вернуть и сохранить переменную и многое другое, но он вызывается только один раз?

 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 голосов
/ 01 июня 2018

Добавьте псевдослучайный хеш в конец вашего URL, например #' + new Date().getTime().Если это работает для вас, то вы, вероятно, столкнулись с этой проблемой , когда использование кошмара .goTo() для перехода по тому же URL приводит к неработоспособности.

0 голосов
/ 01 июня 2018

Можете ли вы попробовать этот поток,

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();
...