问题标签 [dispatchgroup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2256 浏览

swift - 如何使用 Dispatch Groups 等待调用依赖于不同数据的多个函数?

我有三个变量abc。我有三个带有完成块的异步函数来更新这些变量和另外三个只对部分数据进行某些工作的函数。

我确保工作功能等到所有数据都用DispatchGroup.

我希望能够在参数更新后调用每个工作函数,而不是等待一切。这只是一个(显然)简化的版本。可能有更多的变量和函数。

我正在使用斯威夫特。提前谢谢了。

0 投票
1 回答
487 浏览

ios - 在 swift 中添加一个 BlockOperation 对另一个 BlockOperation 的依赖不能正常工作

我在控制器中有多个 api,成功响应后,我必须重新加载UITableView.

现在我从两个 api 开始,第二个 api 依赖于第一个使用BlockOperation和其中DispatchGroup的 api。

首先在viewDidLoad

然后我添加了方法:

我在这里面临的问题是 getSecondDataOperation 首先执行并返回到 tableview 重新加载部分。

我在这里遗漏了什么还是可以有不同的方法?任何帮助将不胜感激。

我试过通过这篇文章:

0 投票
1 回答
105 浏览

swift - 在基本计数器类上使用 DispatchGroup 的好处

我有一种情况,我需要等待一组任务完成,然后再执行一些 UI 渲染代码。

其中一些任务是网络请求,它们将始终完成并离开调度组。然而,有些不是网络请求,可能会或可能不会完成。在一项任务未完成并且离开的调用永远不会平衡进入的调用的情况下,DispatchGroup 永远不会被取消分配。

有没有办法使用 DispatchGroup 解决这个问题?或者我应该自己实现一个简单的计数器。

0 投票
1 回答
137 浏览

ios - Swift - 每 50 次后使用睡眠者运行 1000 个异步任务 - 如何通信 btw DispatchGroups

我必须运行 1000 次异步计算。由于 API 有 50 个请求/分钟的限制,我必须将其分成 50 个块,并在处理一次块后等待一分钟。最终我想打印结果。

我确实尝试使用 using 找到解决方案,DispatchGroup但在如何合并计时器方面遇到了困难:

这只是一次执行所有块,而不是延迟 60 秒。

0 投票
1 回答
106 浏览

ios - 如何使异步请求Swift 5的for循环停止

这是我希望 for 循环等待 func getVenueDetails 完成的函数,如果完成是真的,则退出循环,如果不是,则继续下一个场地 ID。

这是另一个函数,其中请求场地详细信息,所以我希望当 isSent 返回 true 时 searchVenues 中的 for 循环停止(中断),如果返回 false 则继续下一个。

0 投票
2 回答
140 浏览

ios - 如何在for循环中按顺序运行函数

我在堆栈视图中有一组按钮。按下每个按钮都会播放不同的声音。我有一个单独的按钮(循环按钮),按下时会调用该loopButtonPressed函数。我的目标是,当按下此循环按钮时,它将循环通过作为此堆栈视图中按钮的子视图,并按顺序使用该soundButtonPressed功能按顺序播放每个声音。我看到了一个我在下面使用的方法run()将每个连续函数设置为在给定时间后运行的函数。虽然这种工作方式它不是一个很好的解决方案,因为声音文件的长度不同。我在想可能有一种方法可以使用调度组来做到这一点,但我并不完全理解。如果我去掉运行功能,它只会播放堆栈视图中最后一个按钮的声音。我也在使用 AVFoundation 来播放 wav 文件。我感谢任何建议或指导,谢谢。

我的 soundButtonPressed 函数只是一个 switch 语句,其中每个案例都playSound()使用正确的声音文件名调用该函数。这是 playSound 函数:

0 投票
1 回答
98 浏览

ios - 使用 `DispatchGroup` 或一些并发结构来加载数据并按顺序填充 `UITableViewController` 中的单元格

平台:

我在 swift 4 和 xcode 11.4

用例和期望的行为

该应用程序正在加载可能包含 100 或 1000 件商品的提要,比如说 500 件商品。Amplify使用's查询将抓取 500 个项目GraphQL,然后每个项目将加载附加数据。数据将填充UITableViewController. 理想情况下,此过程将按以下确切顺序发生:

  1. query500 项
  2. cell_1 加载附加数据。
  3. cell_1 渲染数据并显示在UITableViewController
  4. cell_2 加载附加数据。
  5. cell_2 渲染数据并显示在UITableViewController

...

  1. cell_500 加载附加数据
  2. cell_500 渲染数据并显示在UITableViewController

因此,用户将看到提要中呈现的单元格“瀑布”。

问题

这似乎是一个需要对执行进行更精细控制的用例,这需要:https ://developer.apple.com/documentation/dispatch/dispatchgroup

我是 Swift 新手,所以这对我来说有点先进。提供了用于GraphQL查询的存根、加载附加数据的类函数以及顶层UITableViewController. 请指导我将如何使用DispatchGroup.

附录

如果我要求的顺序是不可能的,我也会满足于query500 个项目,load每个项目都有额外的数据,然后渲染单元格。但无论哪种方式,单元格都不应使用空数据呈现。

0 投票
1 回答
76 浏览

swift - 为什么 DispatchGroup 无法正常工作

我希望该函数等待第一个函数首先从 firebase 获取数据,然后执行第二个函数,但事实证明它没有按正确的顺序工作

原来在 MenuName 之前已经打印了“完成下载”

结果图像

先感谢您

0 投票
0 回答
60 浏览

ios - 添加新数据时出现此错误...线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

因此,当我第一次加载我的应用程序并添加我的第一条数据时,tableView 重新加载并且部分/行被正确添加,但是当我在那之后输入任何其他数据时,新的数据被添加,但我的原始数据在我的 tableView 中(而不是在后端)中重复,此外,如果我在同一部分下添加数据,我的应用程序崩溃并且我收到标题中的错误。

希望对此有所了解。这是我的第一个 Firestore 应用程序,我仍在努力解决。

编辑1:我尝试删除两个快照侦听器并解决了我的错误问题,但我的数据仍然重复......

编辑2:没关系。我想到了。我将 dataArray 作为一个全局变量,一直附加到它。

在此处输入图像描述 在此处输入图像描述

0 投票
0 回答
81 浏览

swift - 循环更新多个 Firestore 集合

我正在尝试更新多个集合,下面的代码仅在数组中的最后一项上访问 getDocument,我试图通过将 getDocument 放入新函数并使用完成处理程序和 dispatchGroup 来解决该问题。