【发布时间】:2015-01-30 15:52:05
【问题描述】:
我正在尝试从本地数据库中读取数据,然后在我的 node.js 服务器中使用这些数据。我正在使用 mssql 包进行查询。
但是,由于mssql是异步读取数据的,所以我想确保在运行服务器之前数据已经准备好。我尝试使用 Q 包按如下方式创建承诺:
# v is the variable to populate with data
callSql = (v,db,table) ->
d = Q.defer()
sql.connect cfg, (err) ->
request = new sql.Request()
request.query "select * from " + table, (err, data) ->
data.forEach (row) ->
v.push row
console.log "Read "+ table
d.resolve data
d.promise
然后我尝试从几个表中读取数据并继续运行服务器:
callSql var1, con1, table1
.then callSql var2, con2, table2
.then callSql var3, con1, table3
.then -> console.log 'start server' #etc
我希望从 table1 获取数据,然后从 table2 获取数据,依此类推。但是,日志显示未按顺序读取表,因此我的服务器有时会在未准备好所有数据的情况下启动。
我也尝试使用 JQDeferred,结果相似。我究竟做错了什么?如何强制节点按顺序读取表,然后才运行服务器?
谢谢
【问题讨论】:
标签: node.js coffeescript q