我有以下代码来刷新多个项目。这一切都是异步发生的。
func refresh(_ types: [DataTypes], callback: ((String) -> Void)?) {
let refreshOperationQueue: OperationQueue = OperationQueue()
let operations: [Operation] = types.map({ RefreshItem.init(type: $0) })
refreshOperationQueue.addOperations(operations, waitUntilFinished: false)
let _: NSKeyValueObservation = refreshOperationQueue.observe(\.operationCount) { _, _ in
if refreshOperationQueue.operationCount == 0 {
callback?("Success")
}
}
}
重新加载数据。但问题是observe
changeHandler
永远不会被调用。
我假设这是因为观察者被释放在内存中(但我可能完全错了)。如果是这种情况,我不确定如何以有效的方式解决这个问题。如果我把它设为更高的范围,那么它一次只能处理1次刷新,这不是最干净的解决方案。
基本上我希望callback?("Success")
在OperationQueue
完成时运行。
我怎样才能做到这一点?
答案 0 :(得分:1)
问题确实是观察者被释放在记忆中。你需要把它存放在某个地方。如果要存储任意数量的数组,只需在范围内的某个位置声明一个数组,然后将观察者添加到数组中。
或者,您可以简单地将新的function bouncer(arr) {
return arr.filter(Boolean);
}
console.log(bouncer([7, "ate", "", false, 9, 0, NaN, null, undefined]));
添加到操作队列,并将所有其他操作添加为依赖项。这将导致您的完成操作在其他所有操作完成后运行。