【发布时间】:2015-12-10 21:04:10
【问题描述】:
我正在构建一个节点树,但是当我遇到某个值时,我需要发出一个休息请求来获取子节点,然后再构建这些节点。当我为connector.get 请求硬编码了值时,下面的工作有效,但是当我将它变成一个承诺时,函数在承诺返回之前返回。我该如何重构它以延迟返回,直到所有承诺都解决?
buildDom: (viewObj) ->
treeElm = document.createElement('div')
rowContainer = document.createElement('ul')
view = viewObj.data.options[0]
i = 0
while i < view.rows.length
rowElm = document.createElement('li')
rowElm.innerHTML = 'Row ' + i
row = view.rows[i]
cellContainer = document.createElement('ul')
j = 0
while j < row.cells.length
cell = row.cells[j]
cellElm = document.createElement('li')
if cell.view
cellElm.innerHTML = 'View: ' + cell.view
if !cell.view?
connector.get(cell.view).then (res)->
cellElm.appendChild buildDom(res)
else if cell.fieldId
cellElm.innerHTML = 'Field: ' + cell.fieldId
if cell.displayType != 'NONE'
cellContainer.appendChild cellElm
j++
rowElm.appendChild cellContainer
rowContainer.appendChild rowElm
i++
treeElm.appendChild rowContainer
【问题讨论】:
-
你总是必须
return(同步地)在承诺(异步地)解决之前。你唯一的选择是回报一个承诺。
标签: javascript coffeescript promise