Node JS - DB异步调用
Node JS - DB call async?
我是node js的新手,我使用以下链接连接node js与postgres db:
如何通过Node.js连接Postgres
下面的代码在节点控制台运行时从DB (Postgres)获取一些结果
var query_str = "SELECT name FROM city" ;
var pg = require('pg');
var conString = "postgres://postgres:postgres@localhost:5432/cfg";
var client = new pg.Client(conString);
client.connect();
var query = client.query(query_str);
console.log(query);
但是当我像这样将上面的代码放入函数中并进行函数调用
function getname()
{
var query_str = "SELECT name FROM city" ;
var pg = require('pg');
var conString = "postgres://postgres:postgres@localhost:5432/cfg";
var client = new pg.Client(conString);
client.connect();
var query = client.query(query_str);
console.log(query);
return query;
}
返回一个空对象。是因为代码是异步的吗?如果是这样,我该如何解决这个问题呢?
谁能帮我解决这个问题?或者如何继续下去。谢谢。client.query
是异步的,你的函数应该期望一个callback
函数或者它应该返回一个Promise
function getname(cb) {
var query_str = "SELECT name FROM city";
var pg = require('pg');
var conString = "postgres://postgres:postgres@localhost:5432/cfg";
var client = new pg.Client(conString);
client.connect(function(err) {
if (err) cb(err);
client.query(query_str, function(err, result) {
if (err) cb(err);
cb(null, result);
client.end(function(err) {
if (err) cb(err);
});
});
});
}
getname(function(error, data) {
if (error) {
console.log(error);
} else {
console.log(data);
}
});
相关文章:
- 如何使用异步调用更改工厂的变量
- 使变量可用于不带闭包的异步调用
- 需要收集Javascript nodejs异步调用
- 如何使用jQuery等待来自回调的异步调用
- 使用模态库从嵌套的异步调用中生成javascript同步代码
- 在forEach内部进行异步调用
- jQuery没有指定异步调用级别async:false
- SPA异步调用在IE 11中不起作用
- Ember.js-模型find()方法中的异步调用
- Javascript/JQuery处理并发/异步调用和数据竞争
- 在异步调用返回之前隐藏页面
- ExtJs 处理异步调用
- ES6:在异步调用中使用生成器
- Angular js - 异步调用 $scope.users 后不更新模态值
- 在每个循环上完成异步调用,然后转到下一个节点 js
- 从异步调用返回数组,然后为数组的每个元素返回其他异步调用
- 使用 AngularJS 的异步调用
- 循环内部的Javascript异步调用
- 使用Canvas和ForEach处理异步调用
- JavaScript/promise,对sharepoint的多个异步调用