javascript - 如何处理“不推荐使用承诺拒绝”
问题描述
我正试图用承诺来解决我的问题,我收到这个错误,抱怨未处理的承诺拒绝,但我确实有一个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() 处理的承诺。(拒绝 ID:1)(节点:200092)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
整个错误信息:
此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。(拒绝 ID:1)(节点:191496)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
解决方案
无论抛出什么,如果您searchTextOnGoogle
返回一个与内部所有异步操作正确链接的 Promise,然后调用.catch
,则searchTextOnGoogle
应该正确捕获所有错误。使用 async 函数也可以使内容更具可读性:
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");
文档说参数 to.get
应该是完全限定的 URL,因此解决方案可能是将其更改为:
driver.get("https://www.google.com");
或类似的东西。
推荐阅读
- javascript - Uncaught TypeError: Object(...) is not a function when bundled with WebPack 4
- python - 将 SciPy 优化限制为整数
- aem - 如何在使用条件语句的同时附加一个字符?
- javascript - 用 JS 计算一个值并将该值存储在数据库中
- react-native - 当我们平移本机反应时,如何检测对象的 x 位置?
- javascript - React - 尝试在 reduce() 函数中引用 this.props
- biztalk - BizTalk Server TMS 警告 12223
- python - 多处理共享变量(类型自创)
- tensorflow - tfjs-examples/date-conversion-attention 中使用的注意力模型是什么?
- javascript - 如何遍历特定 div 标签中的所有标题标签?