Добрый день.
Есть следующий код (coffeescript)
Q = require("q")
class TreeObjectBuilder
constructor:
@data =
userID: @userID
is_authorized: false
list: []
properties: []
getProductPropertyIds: (id)->
deferred = Q.defer();
sql= "формирование sql"
myResult = []
@db.dquery(sql).then (rows) =>
if rows.length > 0
for row in rows
myResult.push row.property_value_id
console.log "myResult", id, "=>", myResult.join(",")
deferred.resolve myResult
deferred.promise;
lastWithSQL: (sql)->
console.log "lastWithSQL start"
@db.dquery(sql).then (rows) =>
#заполнение массива array данными из базы
#присвоение результата
@data.properties = array
console.log "data3", @data
return
testPro: ->
console.log "testPro start"
reqs= []
reqs.data = []
for filter, i in @filters
console.log filter.values
reqs.push( @getProductPropertyIds( filter.values ) );
Q.all(reqs).done =>
sql = " формирование sql"
console.log "------------>sql1=", sql
return @lastWithSQL sql
last: ->
console.log "call testPro"
@testPro()
console.log "end call testPro"
build: ->
promises = []
promises.push @last()
Q.all promises
class TreePresenter
tree_object: (count_properties, _ids)->
_tree_object = new TreeObjectBuilder
_tree_object.build().then =>
console.log "build_then"
console.log _tree_object.data
, (error) ->
console.error error.stack
Разбираюсь с асинхронной работой и запутался, данные уходят на клиента раньше, чем они прочитаются из базы, т.е. в консоли вывод такой:
call testPro
testPro start
end call testPro
lastWithSQL start
data3
build_then
Мне же нужно чтобы последовательность вывода была такая:
call testPro
testPro start
end call testPro
build_then
lastWithSQL start
data3
Я так понимаю, что у меня не дожидается выполнения функции lastWithSQL.
Не могу понять в чем дело.