Преобразователь обещаний [массив объектов] не является функцией - PullRequest
1 голос
/ 10 июля 2020

У меня есть сценарий, который запрашивает у пользователя ввод для загрузки (или не загрузки) файла. Это довольно просто, но у меня проблема со следующим фрагментом кода. Если пользователь выбирает «НЕТ», то условие else if работает нормально, и код завершает ожидаемое выполнение. Но если пользователь выбирает Да, файл загружается, но я получаю следующую ошибку:

UnhandledPromiseRejectionWarning: TypeError: Promise resolver [object Array] is not a function

Вероятно, мне нужно узнать больше о Promises, но я разделяю часть кода, который не работает, если я совершая очевидную ошибку, которую я не вижу.

async function download_fallo(page) {

    if (download == "Y") {
      
        await new Promise([
          page.click('div > div.col-xs-12.col-sm-11 > div.row > div.col-sm-4.col-lg-3 > a'),
          //page.wait({ waitUntil: 'networkidle0' }) // does not work either
          //page.wait(2000) // UnhandledPromiseRejectionWarning page.wait is not a function... 
          ]);
        return console.log("Perfect")
      } else if (download == "N") {
        console.log("Just the information then!") }
}

Ответы [ 3 ]

3 голосов
/ 10 июля 2020

Спасибо, ребята --- я делал очевидные ошибки, а вы их исправили. Я не использовал Promise.all и допустил ошибку с page.await, оба были указаны. После исправления код работает. Я публикую ниже на тот случай, если кто-то сочтет это полезным, это простое условие, привязанное к пользовательскому вводу readLine для загрузки (или нет) файла PDF с веб-сайта.

async function download_fallo(page) {

    if (download == "Y") {
        await Promise.all([
          page.click('div > div.col-xs-12.col-sm-11 > div.row > div.col-sm-4.col-lg-3 > a'),
          page.waitFor(2000) 
          ]);
        return console.log("Perfect")
      } else if (download == "N") {
        console.log("Just the information then!") }
}
2 голосов
/ 10 июля 2020

Я действительно не знаю, что вам нужно, потому что мне нужно больше контекста, но если вы хотите выполнить массив обещаний, вы можете попробовать

Promise.all([ promise1, promise2 ])

Этот метод принимает массив обещает в качестве входных данных и возвращает одно обещание в качестве выходных данных. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

1 голос
/ 10 июля 2020

Я не уверен на 100%, делает ли ваш скрипт то, что вы ожидаете, но 'page.wait' - это несуществующий метод кукловода. Вам понадобится 'page.waitFor' , если вы хотите подождать / приостановить скрипт для определенных ms-s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...