nightmare.js, на .evaluate это дает мне ошибку на узле - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь выполнить нумерацию страниц с помощью прокрутки (нажатием кнопки).но когда я хочу добавить некоторую задержку к этому действию с узлом 'await new Promise' во время выполнения выдает ошибку, как избежать этого из времени выполнения узла, это фрагмент кода,

 let scrapedData = yield nightmare
    .goto(nextExists)
    .wait(3000)
    .evaluate(function () {

      var links = [];
      var productList = "";
      var flag = true;

      while (flag) {
        var element = document.querySelectorAll('.load-more');
        console.log('aa ' + element[0].style.display == "");
        if (element[0].style.display == "") {
          element[0].click()
        } else {
          flag = false
        }
        await new Promise(resolve => setTimeout(resolve, 3000)); // error
        /*
        await new Promise(resolve => setTimeout(resolve, 3000));
                      ^^^
        SyntaxError: Unexpected token new
            at createScript (vm.js:80:10)
            at Object.runInThisContext (vm.js:139:10)
            at Module._compile (module.js:599:28)
            at Object.Module._extensions..js (module.js:646:10)
            at Module.load (module.js:554:32)
            at tryModuleLoad (module.js:497:12)
            at Function.Module._load (module.js:489:3)
            at Function.Module.runMain (module.js:676:10)
            at startup (bootstrap_node.js:187:16)
            at bootstrap_node.js:608:3
        */
      }
      console.log('all done')
})

1 Ответ

0 голосов
/ 30 мая 2018

Вам не хватает ключевого слова async здесь .evaluate(async function {}).

Вот минимальный пример того, чего вы пытаетесь достичь:

const Nightmare = require('Nightmare');
const nightmare = new Nightmare({show: true});

const scrapedData = nightmare
    .goto('http://google.com')
    // You can use `await` keyword only in `async` functions
    // Async function *always* returns a promise which nightmare knows how to handle
    .evaluate(async function () {
        await new Promise(resolve => setTimeout(resolve, 3000));
    })
    .end()
    .then(() => console.log('All done'));

Подробнее о async/await можно прочитать здесь , например.

...