我试图让我的头周围的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进程。
你的代码的问题是没有正确地链接。按照你调用不同函数的方式,你必须在每次调用之后都有catch!相反,你可以按照@CertainPerformance的建议创建一系列promise。然后,只需使用一个。在链条末端捕捉
。参考资料如下:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#Chaining
不管抛出什么,如果您有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>是什么,当它出现时,我需要检查什么才能消除这个警告吗?