【问题标题】:Return in pg-promise在 pg-promise 中返回
【发布时间】:2017-06-26 02:39:09
【问题描述】:

我使用 Node.js 的 pg-promise 模块创建了一个包含所有查询的单独文件。虽然对于他们中的大多数人我只是在查询后使用req, res,但对于一个我想返回一个值。这没用。它返回undefined。

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

【问题讨论】:

  • 你定义了一个没有返回值的函数,那么你期望什么?在db.one() 之前添加return,您应该会得到承诺。
  • 在db.one() 之前添加return 并去掉另外两个returns 会返回一个空对象。
  • 你的 then() 和 catch() 在这里几乎没用,所以一起摆脱它们。
  • 好吧,这个查询实际上要复杂得多,如果它返回多行,我需要捕获......即使返回的对象不应该是空的,它仍然是空的。
  • 那么你为什么要摆脱另外两个returns 呢?如果你从一个 Promise 回调中返回一个值,它会返回一个新的 Promise,这个 Promise 是用那个值来解决的。我猜你需要代码中的结果,它调用passportLogin()。

标签: node.js postgresql express pg-promise


【解决方案1】:

那段代码同时有两个问题:

  • 无效的 Promise 使用,当在 .catch 中执行 return result 时,这不是处理 Promise 拒绝的方式,您必须提供错误处理,或者重新抛出/重新拒绝错误。
  • pg-promise 库的使用无效。您使用 one 方法,该方法应该在返回 1 条记录以外的任何内容时拒绝,as per the method's documentation,同时您说的是 I need to catch if it returns more than one row... ,这是一个逻辑矛盾。

它的结果如下:你的查询执行成功,返回了多条记录,这反过来使方法one拒绝,然后你将拒绝原因通过@变成一个已解决的原因987654330@。总之,你的代码到处都是坏的。

首先,对于pg-promise,您应该使用正确的方法,根据您期望返回的记录数,请参阅The Basics。

然后根据你的业务逻辑处理.then/.catch。我不能在这里更具体,因为你没有提供更多的细节。

【讨论】:

    猜你喜欢
    • 2021-08-14
    • 2017-01-03
    • 2018-10-14
    • 2021-01-21
    • 2016-07-01
    • 2020-12-05
    • 2016-04-22
    • 2023-03-09
    • 2020-11-28
    相关资源
    最近更新 更多