【问题标题】:get result out of a pg-promise query从 pg-promise 查询中获取结果
【发布时间】:2017-07-22 02:10:15
【问题描述】:

我正在使用 pg-promise 开发一个 Node 项目。我需要用查询的结果来兑现一个承诺,但是我无法得到结果。

get2 : function(id) {
    var qrm = pgp.queryResult;
    PG.db.any('SELECT * FROM referentiel_rd_client WHERE id=\'' + id + '\'')
        .then(data => {
            console.log('got query results');
            resolve(data);
        })
       .catch(error => {
           // error; 
        });

但另一个承诺(应该接收数据)永远不会得到任何东西...... 如何从查询中获取结果? (我可以将它们记录到控制台)。

【问题讨论】:

  • 您不会从函数中返回任何内容 - 执行 return PG.db.any... 并在 then() 中使用 return data;
  • 嗯,我加了return,但是其他的Promise还是没有得到任何东西。
  • 能否添加负责调用get2函数的代码?
  • return new Promise((resolve, reject) => { M.get2(id, (err, data) => { if (err) { return reject (err); } console.log('got success on promise with ' + data); resolve(data); }); });

标签: node.js promise pg-promise


【解决方案1】:

  • 如果你想对结果进行预处理,最后只返回结果, 这就是 promise 的工作原理:

    get2: (id) => {
        return PG.db.any('SELECT * FROM referentiel_rd_client WHERE id=$1', id)
            .then(data => {
                console.log('got query results:', data);
                return data;
            });
    

  • 切勿手动格式化查询,使用库附带的查询格式化引擎,否则最终会破坏查询。

然后你会这样称呼它:

get2(123)
    .then(data => {
        // success
    })
    .catch(error => {
        // error
    });

【讨论】:

  • 这不能回答问题。您如何将结果作为不同的变量返回?您仍然无法从then 内部返回!所以这是没有用的答案。这个设计假设是你异步更新的全局变量或缓存,但是 GraphQL 解析器呢,你需要返回一个离散值?如果您想在必须返回没有副作用的值的情况下执行 FP,该怎么办?
  • @BenjaminR 我确实回答了这个问题,这与任何不同的变量无关,而不是返回一个承诺。不能从承诺中返回?你可以做到,这解决了这个人的问题。
  • 亲爱的小伙子,我很抱歉,这是我的错误,我误读了这个问题。我将进行名义上的编辑以删除我的反对票。
  • 我想我很沮丧,因为有一个(cough并发cough)差距,你只能返回另一个Promise:@987654326 @ 返回 Promisepost 处理结果很酷,但是真正的代码很混乱,您可能只想将值(不是承诺!)保存到变量中。从then(...) 内部返回一个值,该值需要另一个then(...) 调用才能访问,无穷无尽。我的观点是,它如何以及在哪里停止? 如果它准备好后,我只想要一个 Promise 之外的值怎么办?例如,Go 就很简单地处理了这个问题。
猜你喜欢
  • 2016-06-14
  • 1970-01-01
  • 2017-10-14
  • 2018-10-14
  • 1970-01-01
  • 2019-03-27
  • 2021-12-28
  • 2019-03-11
  • 2018-02-19
相关资源
最近更新 更多