查找多个回调何时完成时的编程模型

Posted

技术标签:

【中文标题】查找多个回调何时完成时的编程模型【英文标题】:Programming model when looking for when multiple callbacks are done 【发布时间】:2014-12-10 01:46:37 【问题描述】:

我已经遍历了一些从数据库返回的项目。在获得所有数据之前,我不想将项目发送到渲染引擎。我不知道该怎么做是知道我什么时候拥有所有元素

data = 
pizza.toppings (err, toppings)->
    for topping in toppings
        topping.flavors (err, flavors)->
            data[topping.name] = flavors.length

    return data

我将返回数据放在任何地方,它总是会立即返回。有没有办法构造此代码,以便仅在所有回调完成时返回 data

【问题讨论】:

不,您不能停止返回,但您可以将需要数据的操作移动到回调中。 【参考方案1】:

我认为您需要像异步库这样的东西。看看这个:https://github.com/caolan/async 他们有几个 ControlFlow 功能,希望与您的 UseCase 相匹配。 或者,您也可以使用 Promises。

【讨论】:

【参考方案2】:
data = 
pizza.toppings (err, toppings) ->
  _toppingLength = toopings.length
  doSomethingFinally = ->
    if _toppingLength is data.length
      console.log("done!!")
  for topping in toppings
    topping.flavors (err, flavors) ->
      data[topping.name] = flavors.length
      doSomethingFinally()

需要文字吗?

【讨论】:

以上是关于查找多个回调何时完成时的编程模型的主要内容,如果未能解决你的问题,请参考以下文章

WINSOCK.06.重叠IO模型:完成例程

python异步编程--回调模型(selectors模块)

Flink概念:编程模型上

(转)python异步编程--回调模型(selectors模块)

UDP.6.重叠IO模型:完成例程

套接字中没有可用数据时的异步编程模型