pg-promise中的返回值

5

我使用 Node 的 pg-promise 模块创建了一个包含所有查询的单独文件。虽然对于大多数查询,我只需在查询后使用 req, res,但有一个查询我想返回一个值。然而它不起作用,它会返回 undefined

passportLogin: (email)=> {
        db.one(`SELECT userid 
                FROM user`)
            .then( result => {
                return result;
            })
            .catch( error => {
                return error;
            });
    }

你定义了一个没有返回值的函数,你期望得到什么?在 db.one() 前加上 return,你应该会得到这个 Promise。 - Sirko
db.one() 前添加 return 并消除其他两个 return,将返回一个空对象。 - ocram
你的 then()catch() 在这里基本上是无用的,所以干脆把它们都删掉。 - Sirko
实际上,这个查询要复杂得多,我需要判断它是否返回了多行数据...即使它不应该为空,返回的对象仍然是空的。 - ocram
那你为什么要删除另外两个return呢?如果你从一个Promise回调函数中返回一个值,它将返回一个新的Promise,并解析该值。我猜你需要在调用passportLogin()的代码中使用结果。 - Sirko
1个回答

2
那段代码存在两个问题:
  • 无效的 Promise 使用,当在 .catch 中使用 return result 时,这不是 Promise 拒绝的处理方式。您必须提供错误处理或重新抛出/拒绝该错误。
  • 无效使用 pg-promise 库。您使用了方法 one,该方法应在返回除 1 条记录之外的任何内容时拒绝,根据该方法的文档,同时您又说 我需要捕获它是否返回多行...,这是一个逻辑上的矛盾。
其结果如下:您的查询成功执行并返回多条记录,这反过来使方法 one 拒绝,然后您将拒绝原因转换为已解决的原因,通过执行 return result。总而言之,您的代码到处都有问题。
首先,使用 pg-promise 库时,您应根据期望返回的记录数量使用正确的方法,请参见 基础知识
然后根据您的业务逻辑处理 .then/.catch。我无法在这里提供更多具体信息,因为您没有提供进一步的细节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接