问题标签 [dispatchsemaphore]

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 投票
2 回答
449 浏览

swift - Swift 上使用完成处理程序和 DispatchSemaphore 的异步请求

我正在尝试使用andasync对 Swift 提出请求。我需要得到响应,然后将其返回给另一个方法,所以基本上这是我的代码Alamofire's completion handlerDispatchSemaphores

问题是请求总是返回false,因为没有等到apiRequest响应......你有什么想法来解决这个问题吗?太感谢了!

附言。apiRequest返回“真”/“假”

0 投票
2 回答
108 浏览

ios - 为 UI 分配信号量

我想为 uiviews 的 alpha 设置动画,但我似乎无法做到。它的行为很奇怪,并说运行 UI 更改不建议在后台线程上运行,但我不知道如何让它在主线程上运行。有人可以帮助我吗?我相信它会跳过第一个 UIView.animate 块并在没有任何动画的情况下执行第二个块。

func animateSemaphore() {

}

0 投票
1 回答
45 浏览

swift - 仍然无法弄清楚如何为用户删除订购异步任务

因此,我试图确保在删除用户时以特定顺序执行一组异步任务。

所以我想要发生的是:

  • 检查用户是否在购买时添加了客人
  • 如果用户没有客人或根本没有任何购买,则从函数返回并继续删除过程(要点 6)
  • 如果用户有任何购买的客人,请删除每个客人
  • 删除所有客人后,继续删除他们所做的每笔购买
  • 删除所有购买后,继续将实际用户本身从 Firestore 中删除
  • 2 秒后,我将用户从 firebase 身份验证中删除,以确保尝试删除具有空用户的文档时不会发生崩溃
  • 然后我只是转到主菜单

所以我试图用我的函数中的这段代码来完成这个:

在过去的几个小时里,我一直在尝试将DispatchSemaphore()其实现到我的代码中,但它并没有达到我期望的效果。我会阅读网上的文章和示例,DispatchSemaphore()但就我特别想做的事情而言,场景与我的并不完全相同。

当点击触发此警报操作时,不会打印任何内容,并且最终会永远旋转,用户不会从 Firebase 身份验证中删除,并且 Firestore 数据库中仍有剩余数据,如下所示:

错误

我只是想找出在上面的有序列表中对这些异步任务进行排序的最佳方法,并在数据库中没有剩余的用户删除。提前致谢。

0 投票
1 回答
122 浏览

swift - 调度信号量调用后如何修复应用程序冻结

我正在阅读这个关于应用程序冻结和信号量的问题,我试图在我的代码中实现答案,但是尽管在主线程上调用 UI 工作,它仍然冻结了我的应用程序。我的目标是在调用所有条目后停止应用程序冻结并让 UI 正常工作。

这是迄今为止我在删除方法中的警报操作:

所以这实际上会干净地删除所有内容,Firestore 数据库中没有任何残留数据,这就是我一直想要发生的事情,唯一的问题是应用程序冻结。我认为我上面链接的问题的答案适用于我的情况,但事实并非如此。

还要提一下,我曾建议使用 Cloud Functions 解决此问题,但我的应用程序有两种类型的用户,在删除过程中具有不同的逻辑和语法,因此我不能只auth().onDelete()在 Cloud Functions 中使用简单的并清理残留物。即使我可以,这将是我在这里面临的相同问题,但只是在服务器端,试图正确排序任务,在我看来这是重复的,而不是目前最明智的做法。

有什么其他建议可以解决这个问题吗?提前致谢。

编辑由于信号量不是要走的路,我求助于这个:

这仍然会留下残留数据,并且不会按顺序执行任务。还有其他建议吗?

0 投票
2 回答
50 浏览

swift - 无法用信号量打破循环

我正在尝试在DispatchWorkItemusing中添加异步任务列表semaphore

如果我回去,我希望它打破循环和过程。为此,我使用该cancel方法取消DispatchWorkItem但它不会中断循环。

有什么解决方案可以打破semaphore我按下后退按钮时的循环和过程?

0 投票
1 回答
188 浏览

swift - 以防万一,在取消初始化之前安全地发出信号量吗?

如果我告诉信号量等待,然后在信号量被告知发出信号之前取消初始化拥有它的视图控制器,则应用程序会因Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)错误而崩溃。但是,如果我只是调用视图控制器semaphore.signal()deinit方法,就可以避免灾难。但是,如果 async 函数在deinit被调用之前返回并且视图控制器被取消初始化,那么signal()就会被调用两次,这似乎没有问题。但是这样做是否安全和/或明智?

0 投票
0 回答
41 浏览

swift - 如何正确释放信号量?

重现崩溃的步骤:
如果调用 semaphore.wait(),然后在调用 semaphore.signal 之前取消初始化拥有它的视图控制器,则应用程序崩溃。

在类的 dinit 上出现以下错误:

用过的:

但奇怪的是在 deinit 下添加下面提到的代码修复了崩溃问题,不知道为什么。

那么有什么适当的解决方法吗?