无法访问NodeJs函数中的变量
问题描述:
我正在使用NodeJS postgresql客户端通过它获取一些数据循环并提供输出。我使用ExpressJS和postgresql客户端。无法访问NodeJs函数中的变量
这是我的代码
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多个循环才能完成。
那么告诉我如何实现它。 我在做什么错,如何解决? 非常感谢你
答
我会为此使用async.js,我自己。
var rows = // your result.rows stuff.
function doTheQuery(item, callback){
// your query logic here, calling the callback with the results
}
async.series(rows, doTheQuery, function(err){
// handle any errors
}
的[我如何返回从一个异步调用的响应?(可能的复制http://*.com/questions/14220321/how-do-i-return-the-response-from-an异步调用) – undefined
但问题是函数是在一个循环内,所以我不能在函数内返回数据。我一直等到循环结束。因此,在client.query调用中做出响应并不简单。 – rksh
您应该签出nodejs postgres驱动程序文档。然后你会意识到你有数据的回调函数是异步发生的,因此你的res.json调用发送的信息还没有机会被更新。 – Paul