当前位置: 首页 > 知识库问答 >
问题:

如何处理“promise拒绝被弃用”

朱鹤轩
2023-03-14

我试图让我的头周围的promise,我得到了这个错误抱怨未处理的promise拒绝,但我确实有一个<代码>捕捉如果它被拒绝!

谁能帮帮我我做错了什么?

这是我的代码:

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)未处理的PromisejectionWarning:未处理的promise拒绝。这个错误要么是由于在没有catch块的情况下抛出异步函数的内部,要么是因为拒绝了没有使用catch块处理的promise。catch()。(拒绝id:1)(节点:200092)[DEP0018]弃用警告:未处理的promise拒绝被弃用。将来,未处理的promise拒绝将终止节点。具有非零退出代码的js进程。

整个错误消息:

DevTools在ws://127.0.0.1:62260/DevTools/browser/6dd5b3dc-f6bb-4147-9421-a6e0e172017b(节点:191496)上侦听未经处理的PromiserEjectionWarning:InvalidArgumentError:html" target="_blank">对象处的无效参数(会话信息:chrome=79.0.3945.117)。Executor上的parseHttpResponse(C:\promise\node\u modules\selenium webdriver\lib\error.js:550:15)上的throwDecodedError(C:\promise\node\u modules\selenium webdriver\lib\http.js:563:13)。在ProcessTicks和Rejections(internal/process/task_queues.js:93:5)上异步执行(C:\promise\node_modules\selenium webdriver\lib\http.js:489:26)。执行(C:\promise\node\u modules\selenium webdriver\lib\webdriver.js:699:17)(节点:191496)未处理的Promisejection警告:未处理的promise拒绝。这个错误要么是由于在没有catch块的情况下抛出异步函数的内部,要么是因为拒绝了没有使用catch块处理的promise。catch()。(拒绝id:1)(节点:191496)[DEP0018]弃用警告:未处理的promise拒绝被弃用。将来,未处理的promise拒绝将终止节点。具有非零退出代码的js进程。

共有2个答案

姬俊远
2023-03-14

你的代码的问题是没有正确地链接。按照你调用不同函数的方式,你必须在每次调用之后都有catch!相反,你可以按照@CertainPerformance的建议创建一系列promise。然后,只需使用一个。在链条末端捕捉。参考资料如下:

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

湛博易
2023-03-14

不管抛出什么,如果您有search chTextOnGoogle返回一个与内部所有异步操作正确链接的Promise,然后在调用search chTextOnGoogle时调用。捕获,所有错误都应该被正确捕获。使用异步函数也可以使内容更具可读性:

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中的异步操作与外部promise链正确地链接起来。

错误可能是由以下行引起的:

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

文件上说参数是。get应该是完全限定的URL,因此解决方案可能是将其更改为:

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

或者类似的东西。

 类似资料:
  • 我得到这个错误- (节点:18420)未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“name” (节点:18420)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终止节点进程,请

  • 我想在Repl上为我的游戏实现一个基本的排行榜。它,所以我创建了一个节点。js后端。这是我在后端的配置: 但是每当我尝试发布时,我都会得到以下错误: (节点:344)未处理的PromisejectionWarning:TypeError:无法读取null的属性“push” (节点:344)UnhandledPromiseRejtionWarning:未处理的promise拒绝。这个错误要么是由于抛

  • 我有以下验证函数检查用户是否存在: 以下使用Chai的测试应对此进行测试: 错误确实会被抛出,但是mocha在控制台中显示以下内容: 2)显示抛出,如果用户是未定义的(节点: 18587)UnhandledPromiseRejse警告:未处理的promise拒绝(拒绝id: 2):错误:用户不存在 所以我的问题是,我如何重写测试,让它捕捉到promise拒绝?

  • 我正在与节点JS中的promise模式作斗争 我在db中寻找用户,然后用用户引用保存新实体,但当用户不在db中时,我应该返回拒绝,但我不确定如何正确地做到这一点。 有什么办法可以做得更好吗? btw:对不起,coffeescript :-[

  • 本文介绍了单个promise组合器: 但我没有看到的是,一种运行所有promise的方法,但不是在个人promise被拒绝时短路。我如何确保所有的promise都得到履行,但我能处理拒绝和所有promise的解决?

  • 为了学习角度2,我正在尝试他们的教程。 我得到这样的错误: 我在SO中浏览了不同的问题和答案,但没有发现什么是“未处理的promise拒绝”。 有人能简单地解释一下它是什么,以及<code>错误:生成cmd ENOENT</code>是什么,当它出现时,我需要检查什么才能消除这个警告吗?