2

我觉得应该有一个简单的答案来解决我想念的问题。我很少得到 unhandledRejections,但是当我这样做时,reasonfromprocess.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(...),所有这些都导致了无限的控制台日志记录循环。

4

0 回答 0