Я пытаюсь прочитать данные из локальной базы данных, а затем использовать эти данные на моем сервере node.js. Я использую пакет mssql для запросов.Асинхронные базы данных в node.js
Однако, поскольку 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
я ожидал получить данные из таблицы1, затем из таблицы2 и т. д. Тем не менее, журнал показывает, что таблицы не читаются по порядку, поэтому мой сервер иногда запускается без готовности всех данных.
Я также пробовал с JQDeferred с аналогичными результатами. Что я делаю не так? Как я могу заставить узел читать таблицы последовательно и только затем запустить сервер?
Благодаря
Это делает трюк, спасибо. Но я до сих пор не понимаю, почему я, как вы говорите, управлял ими последовательно, но получал результаты в случайном порядке. – legrojan
не знаю достаточно о скрипте кофе, чтобы помочь вам там, – akaphenom
Я не думаю, что это связано с cs vs js, ведь cs переводится в js довольно просто. Тем не менее, спасибо. – legrojan