【发布时间】:2016-06-18 02:43:56
【问题描述】:
我正在使用 NodeJS postgresql 客户端通过它获取一些数据循环并提供输出。我将 ExpressJS 与 postgresql 客户端一起使用。
这是我的代码
var main_data = some array of data
var user_info = {}
for (var key in result.rows) {
var user = main_data[key].user
client.query('SELECT name,age,address FROM users WHERE user_id = $1 LIMIT 1;' , [user], function(queryErr, result){
var return_data = result.rows[0]
user_info.name = return_data.name
user_info.gender = return_data.gender
user_info.address = return_data.address
main_data[key].user_info = user_info
})
}
done()
res.json(main_data)
return
但是,当我运行此代码时,我没有得到正确的输出。用户信息不会推送到 main_data。它只是输出 main_data 变量作为代码的开头。
它并不像建议的重复那样简单 因为该函数位于 for 循环内,所以一旦函数完成,我不能只进行响应调用。我必须等到整个循环完成,这可能是 1000 多个循环才能完成,然后才能进行响应调用。
那么请告诉我如何实现它。 我做错了什么,如何解决? 非常感谢
【问题讨论】:
-
但问题是函数在循环内,所以我无法在函数内返回数据。我一直等到循环完成。因此,在 client.query 调用中做出响应并不简单。
-
您应该查看 nodejs postgres 驱动程序文档。然后,您将意识到您拥有数据的回调函数异步发生,因此您的 res.json 调用正在发送尚未有机会更新的信息。
标签: javascript node.js postgresql express npm