我觉得应该有一个简单的答案来解决我想念的问题。我很少得到 unhandledRejections,但是当我这样做时,reason
fromprocess.on('unhandledRejection', (reason, promise) => {...
并不总是足以找到错误的起源。所以我希望也能[Object Promise]
记录从promise
.
代码:
module.exports = async (client, process, reason, promise) => {
const date = new Date();
const formatDate = stripIndents`${(date.getMonth() + 1)
.toString().padStart(2, '0')}-${date.getDate()
.toString().padStart(2, '0')}-${date.getFullYear()
.toString().padStart(4, '0')}`
const formatTime = stripIndents`${date.getHours()
.toString().padStart(2, '0')}-${date.getMinutes()
.toString().padStart(2, '0')}-${date.getSeconds()
.toString().padStart(2, '0')}`
var dir = './logs';
if (!fs.existsSync(dir)) fs.mkdirSync(dir);
fs.appendFile(`./logs/${formatDate} UnhandledRejection.log`, `${formatDate} ${formatTime}: A new unhandledRejection: at promise ${promise} for: ${reason}\n`, function (err) {
if (err) throw err;
console.log(`A new UnhandledRejection has been logged to: ${formatDate} UnhandledRejection.log`)
});
}
这当然会在我的日志文件中记录与此类似的内容:
09-28-2021 04-00-15:TypeError 的新 unhandledRejection 错误 [object Promise]:音量必须是数字。在这种情况下,我知道我指的是我的音乐播放器的音量,但是当我得到这样的东西时:
08-10-2021 07-03-02: A new unhandledRejection error [object Promise] for TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters
,很难找到这个问题的来源。
虽然reason
通常足以找到错误的来源,但访问[Object Promise]
可以帮助进一步查明错误。我尝试过promise.catch(...)
, promise.then(...)
, promise.then(...).catch(...)
,所有这些都导致了无限的控制台日志记录循环。