Как справиться с «обещаниями отклонения не рекомендуется» - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь обернуть голову обещанием, и я получаю эту ошибку с жалобой на необработанное отклонение обещания, но у меня есть catch, если оно отклонено!

Может кто-нибудь помочь, пожалуйста мне, что я делаю неправильно?

Вот мой код:

var webdriver = require('selenium-webdriver');

function searchTextOnGoogle() {
  var driver = new webdriver.Builder().forBrowser("chrome").build();

  driver.get("www.google.com").then(function() {
    driver.findElement(webdriver.By.linkText("Automation")).click().then(function() {
      driver.getTitle().then(function(title) {
        setTimeout(() => {
          console.log(title);
          driver.quit();
        }, 5000);
      });
    }).catch(function(err) {
      console.log(err);
    });
  });
}

Ошибка:

(узел: 200092) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо в результате выброса внутри асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отклонения: 1) (узел: 200092) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели. В будущем отклонения обещания, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.

полное сообщение об ошибке:

DevTools прослушивает ws: //127.0.0.1: 62260 / devtools / browser / 6dd5b3d c -f6bb-4147-9421-a6e0e172017b (узел: 191496) UnhandledPromiseRejectionWarning: InvalidArgumentError: недопустимый аргумент (информация сеанса: chrome = 79.0.3945.11) throwDecodedError (C: \ обещание \ node_modules \ selenium-webdriver \ lib \ error. js: 550: 15) в parseHttpResponse (C: \ обещание \ node_modules \ selenium-webdriver \ lib \ http. js : 563: 13) в Executor.execute (C: \ обещание \ node_modules \ selenium-webdriver \ lib \ http. js: 489: 26) в processTicksAndRejected (внутренняя / process / task_queues. js: 93: 5) at asyn c thenableWebDriverProxy.execute (C: \ обещание \ node_modules \ selenium-webdriver \ lib \ webdriver. js: 699: 17) (узел: 191496) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо в результате выброса внутри асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отклонения: 1) (узел: 191496) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели. В будущем отклонения обещания, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Независимо от того, что выкидывает, если у вас есть searchTextOnGoogle, возвращайте Promise, который должным образом связан со всеми асинхронными операциями внутри, а затем вызывайте .catch по вызову searchTextOnGoogle, все ошибки должны быть правильно перехвачены. Используйте функцию asyn c, чтобы сделать вещи более читабельными:

const delay = ms => new Promise(res => setTimeout(res, ms));
async function searchTextOnGoogle() {
  var driver = new webdriver.Builder().forBrowser("chrome").build();

  await driver.get("www.google.com");
  await driver.findElement(webdriver.By.linkText("Automation")).click();
  const title = await driver.getTitle();
  await delay(5000);
  console.log(title);
  await driver.quit();
}

searchTextOnGoogle()
  .catch(console.log);

Обратите внимание, что .quit также возвращает Promise, и вам необходимо правильно связать асинхронные операции внутри setTimeout с external Promise chain.

Возможно, ошибка вызвана строкой:

driver.get("www.google.com");

В документах указано , что параметр .get должен быть полностью определенным URL Таким образом, решение может быть в том, чтобы изменить его на:

driver.get("https://www.google.com");

или что-то в этом роде.

0 голосов
/ 07 февраля 2020

Проблема с вашим кодом состоит в том, что он неправильно связан. То, как вы вызываете разные функции, вам придется использовать catch после каждого! Вместо этого вы можете создать цепочку обещаний, как рекомендуется @CertainPerformance. Затем вы можете использовать только один .catch в конце цепочки. Ссылка ниже:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#Chaining

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