【问题标题】:Where should I use done()我应该在哪里使用 done()
【发布时间】:2014-03-01 15:29:44
【问题描述】:

我正在使用带有连接池的 pg 在移动后端工作,现在我遇到了问题

错误文字

Error: connection pointer is NULL

据我了解,https://github.com/brianc/node-postgres/issues/182.

我的问题done() 在 pg 中是如何工作的,我应该在哪里调用它?

如果我有例如多个查询,应该一个一个地调用

pg.connect("constr", function(err,client,done) {
  if (err) callback(err);
  else {
    client.query("some query", function(err, result) {
       if (err) callback(err);
       else {
          client.query("one more", function(err, result) {
             if (err) callback(err);
             else {
                callback(null, result);
             }
          });
       }
    });
  }
});

请在这个例子中解释我done()

【问题讨论】:

  • 您的代码中的callback 是什么?我认为您可以安全地用 done 搜索替换回调;)
  • @MukeshSoni 它是指顶层,它回调到处理http请求的路由/控制器方法

标签: node.js postgresql connection-pooling pg


【解决方案1】:

完成client 后,您将调用完成 -

 client.query("some query", function(err, result) {
       if (err) {
           done();
           callback(err);
       } else {
          client.query("one more", function(err, result) {
             done();
             if (err) callback(err);
             else {
                callback(null, result);
             }
          });
       }
    });

【讨论】:

  • 但是如果我的“某些查询”有错误,我的连接会返回池吗?
  • done 与错误无关。它只是将客户端释放回池中。错误可能是由于各种原因,如“您的数据库已关闭”、“无效查询”等。
  • 我知道,但是在第二行中 if (err) ... else 不会被调用,所以 done() 不会被调用,对吗?
  • 没错。所以你也应该在那里完成。我将编辑答案。
  • 谢谢你,我只是等待一段时间以获得更多答案然后接受它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2011-06-02
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多