【发布时间】:2015-11-06 12:47:18
【问题描述】:
目标是让theQuery 函数处理查询并将行数组返回给result。在theQuery 函数中console.log 按预期工作,但记录结果日志undefined。 undefined 日志首先出现在终端上。如何使用 Promise 来解决这个问题?
"use strict";
var pg = require('pg').native;
var connectionString = "...";
var client = new pg.Client(connectionString);
client.connect();
function theQuery(table,column) {
client.query('SELECT * FROM "'+table+'" WHERE column = '+"'"+column+"';", function(err, result) {
if(err) {
return console.error('error running query', err);
}
console.log(result.rows);//works logs the rows
return result.rows;
});
}
let Query = theQuery("table", "column);
console.log(result);// logs undefined
【问题讨论】:
-
您正试图从回调函数返回一个值。这表明对异步代码的深刻误解。请参阅重复的线程。
-
@Tomalak 我在stackoverflow.com/questions/14220321/… 尝试了解决方案,但我无法让它们工作,这就是为什么我特别询问承诺以及如何在这种情况下实现它们。
-
“我无法让他们工作”远远不足以继续下去。另一个线程详细介绍了异步编程的工作原理,你不可能在这么短的时间内尝试所有的东西。
-
如何使用承诺在链接的问题中得到了准确的解释。还有更多信息的链接。请参阅“使用承诺”部分。这个例子再简单不过了。
-
pg-promise 已经在这里完成了您需要的一切。
标签: javascript node.js promise ecmascript-6