当下面的代码错误(ping()
拒绝其promise)时,我会收到警告。HTTP函数似乎错误很好。我想,ping()
本身一定发生了什么事情,这在某种程度上避免了try-catch。
有人能开导我吗?(这是在几次尝试改变事情以使其工作之后。)
(async () => {
try {
let webTask, pingTask;
try {
webTask = httpsGet(urls[0]);
} catch (e) {
console.log(e);
}
try {
pingTask = ping('8.8.8.8');
} catch (e) {
console.log(e);
}
try {
const webResult = await webTask;
console.log('HTTP result:', webResult);
} catch (e) {
console.log(e);
}
try {
const pingResult = await pingTask;
console.log('Ping result:', pingResult);
} catch (e) {
console.log(e);
}
} catch (e) {
console.log('Error:', e);
}
})();
"main.js" 137 lines, 2945 characters
(node:58299) UnhandledPromiseRejectionWarning: #<Object>
(node:58299) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:58299) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
const netping = require('net-ping');
const pingSession = netping.createSession({
retries: 0,
timeout: 10000
});
const ping = ip => {
return new Promise((resolve, reject) => {
let result = { ipAddress: ip, start: new Date(Date.now()), end: null, error: null, duration_ms: -1 };
pingSession.pingHost(ip, (error, target) => {
result.end = new Date(Date.now());
result.duration_ms = result.end - result.start;
if (error) {
result.error = error;
console.log('rejecting promise');
reject(result);
} else {
resolve(result);
console.log('resolving promise');
}
});
});
};
NodeJS 11.13.0
await
是javascript构造,它将拒绝promise转换为异常。也就是说,await
是处理拒绝的构造。
当你写:
try {
pingTask = ping('8.8.8.8');
} catch (e) {
console.log(e);
}
这里没有await
,因此没有任何东西可以将拒绝转换为异常,或者以任何方式处理拒绝。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const test = (ms, msg) => {
return new Promise((resolve, reject) => {
sleep(ms).then(reject(msg)).catch(console.log);
});
};
(async () => {
let task1;
try {
const ms = 50;
task1 = test(ms, "hey");
await sleep(ms * 2); // otherwise you don't get an error
await task1;
} catch (e) {
console.log(e);
}
})().then(console.log).catch(console.log);
promise()
构造函数开始运行test()
,50毫秒后promise被拒绝,但是没有任何东西可以将拒绝转换为异常。如果我们删除100 ms的睡眠,那么await
在50 ms睡眠完成之前将其“convert rejection to exception”逻辑注册到promise方式,因此当promise在调用await
后49 ms被拒绝时,有一个处理程序将其转换为异常。
我有一个bot,它获取用户消息内容,删除用户消息,然后向消息发送私人消息。作者,然后在embed中发送用户消息的内容。在发送几条消息后,bot将发送2条消息,而不是1条,并显示警告。知道怎么修吗? 警告: superadmin@vps-XXXXXX:~/path$节点test.js(节点: 1059)UnHandledPromiseRejtionWarning: DiscordAPIError:未
我一直得到“UnhandledPromiseRejectionWarning:UnhandledPromiseRejection.此错误源于在没有catch块的异步函数内部抛出,或拒绝未用.catch()处理的Promission.(拒绝ID:2)” 我已经处理了所有的承诺,但错误仍然存在
我得到这个错误- (节点:18420)未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“name” (节点:18420)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终止节点进程,请
我试图让Fastif-cookie工作在我的NestJS项目,我收到以下错误: (节点: 38325)未处理的promise拒绝警告:类型错误:无法读取未定义的属性“装饰请求” 未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终
我试图执行下面的代码,但它在管道中抛出未处理的promise拒绝警告。在本地,它工作正常,没有任何问题。 日志错误:找不到进程“3224”。(节点:836)未处理的PromisejectionWarning:#(节点:836)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。c
我收到这个警告。怎么了?