嵌套 for 循环中的多个异步请求

huddie96

我试图从我的数据库中获取数据,并在获得一条数据后,使用该条数据来查找新的数据。

最后,我可以将这些拼凑起来并返回派生数据。我不确定这是解决这个问题的最佳方法,但这是我目前所处的位置。

我的问题是对数据库 (Firebase) 的每次调用都是异步的,因此我需要以某种方式等待异步完成,然后再继续。

我已经查看了调度组,这是迄今为止我所拥有的:

 let taskGroup = DispatchGroup()

    for buildingKey in building.allKeys
    {
      var aprt = NSDictionary()

      taskGroup.enter()
         // ASYNC REQUEST
      getAbodesWithUID(UID: buildingKey as! String, callback: { (success, abodes) in
        aprt = abodes
        taskGroup.leave()
      })

      taskGroup.enter()
      for key in aprt.allKeys
      {
        // ASYNC REQUEST
        getTenantsWithAprt(UID: key as! String, callback: { (success, user) in
          for userKey in user.allKeys
          {
            let dict = NSMutableDictionary()
            dict.setValue(((building[buildingKey] as? NSDictionary)?["Address"] as? NSDictionary)?.allKeys[0] as? String, forKey: "Building")
            dict.setValue((user[userKey] as? NSDictionary)?["Aprt"], forKey: "Number")
            dict.setValue((user[userKey] as? NSDictionary)?["Name"], forKey: "Name")
            dict.setValue(userKey, forKey: "UID")
            dict.setValue((user[userKey] as? NSDictionary)?["PhoneNumber"], forKey: "Phone")
            apartments.append(dict)
          }
          taskGroup.leave()
        })
      }
    }

    taskGroup.notify(queue: DispatchQueue.main, execute: {
      print("DONE")
      callback(true, apartments)
    })

我似乎无法让它正确回调

影子事实

首先,您应该在aprt.allKeysfor 回调内部进行迭代,否则getAbodesWithUID,当 for 循环执行时aprt将是一个空字典。

其次,taskGroup.enter()上面那个 for 循环调用应该在 for 循环内部,因为它需要为每个键调用一次。它应该放在// ASYNC REQUEST评论当前所在的位置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

嵌套异步循环中的节点 MySQL 两个查询

来自分类Dev

从嵌套循环中突围

来自分类Dev

嵌套循环中的索引

来自分类Dev

嵌套循环中的ArrayIndexOutOfBoundsException

来自分类Dev

嵌套循环中的索引

来自分类Dev

嵌套循环中的增量

来自分类Dev

While循环可修改嵌套循环中的多个元素

来自分类Dev

节点。带有多个http请求的js嵌套异步映射

来自分类Dev

在嵌套for循环中处理嵌套列表

来自分类Dev

在python的嵌套循环中嵌套打印

来自分类Dev

我可以在单个 for 循环中为嵌套字典指定多个键而不是使用嵌套 for 循环吗?

来自分类Dev

使嵌套的HTTP请求与Java异步

来自分类Dev

避免多个嵌套的 for 循环

来自分类Dev

在循环中链接嵌套的Promise

来自分类Dev

在`for`循环中嵌套`setTimeout`s

来自分类Dev

stata嵌套循环中的“ {必需”

来自分类Dev

从嵌套的while循环中打破

来自分类Dev

在嵌套循环中分叉

来自分类Dev

嵌套循环中的步骤数

来自分类Dev

jinja“for”循环中的嵌套“If”语句

来自分类Dev

在嵌套的 for 循环中追加列表

来自分类Dev

for 循环中的嵌套 ifelse 语句

来自分类Dev

嵌套循环中的 XlsxWriter 格式

来自分类Dev

循环嵌套嵌套的诺言

来自分类Dev

在同时嵌套嵌套循环

来自分类Dev

使用请求承诺嵌套异步请求

来自分类Dev

如何在 node.js 中的异步和条件循环中执行嵌套查询

来自分类Dev

嵌套for循环中嵌套while循环的时间复杂度

来自分类Dev

仅在嵌套循环中突破内循环