簡體   English   中英

調試未處理的承諾拒絕

[英]Debug Unhandled Promise Rejections

我寫了以下數據庫查詢以獲取具有一定偏移量的所有帖子:

async function getPaginationPosts(start, size) {
    try {
        const posts = await knex("posts").select().where({
            deleted: false,
        }).orderBy("createdAt").limit(size).offset(start)
    } catch (e) {
        console.log(e.message)
        console.log(e.stack)
    }
    return posts
}

但是,我得到以下Unhandled Promise Rejection

(node:1824) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: posts is n
ot defined
(node:1824) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejection
s that are not handled will terminate the Node.js process with a non-zero exit code.

我的問題是,我在控制台中沒有得到有關該錯誤的任何進一步信息。

您網站上的任何建議:

  1. 如何正確調試這些拒絕類型?
  2. 上面的代碼有什么問題?

預先感謝您的答復!

更新資料

我將功能更改為以下內容:

async function getPaginationPosts(size, offset) {
    try {
        return await knex("posts").select().where({
            deleted: false,
        }).orderBy("createdAt").limit(size).offset(offset)
    } catch (e) {
        console.log(e.message)
        console.log(e.stack)
        return null
    }
}

現在,我收到以下異常:

(node:9096) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: start is n
ot defined

我不在函數中使用變量start

有什么建議我在這里做錯了嗎?

記錄未處理的拒絕的一種便捷方法-添加偵聽器(通常在應用程序的入口點,即main.js),如下所示

process.on("unhandledRejection", (error) => {
  console.error(error); // This prints error with stack included (as for normal errors)
  throw error; // Following best practices re-throw error and let the process exit with error code
});

posts定義的位置不正確。 try/catch塊之外定義它們,或從try塊返回結果:

async function getPaginationPosts(start, size) {
    try {
        return await knex("posts").select().where({
            deleted: false,
        }).orderBy("createdAt").limit(size).offset(start)
    } catch (e) {
        console.log(e.message)
        console.log(e.stack)
        return null
    }
}

要么:

async function getPaginationPosts(start, size) {
    let posts
    try {
        posts = await knex("posts").select().where({
            deleted: false,
        }).orderBy("createdAt").limit(size).offset(start)
    } catch (e) {
        console.log(e.message)
        console.log(e.stack)
    }
    return posts
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM