【发布时间】:2020-04-14 20:41:33
【问题描述】:
我想用 Future 做一个异步工作。 但是下面的 .sink() 闭包 永远不会被调用。 看来 Future 的实例是在被调用后立即释放的。
Future<Int, Never> { promise in
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
promise(.success(1))
}
}
.receive(on: DispatchQueue.main)
.sink(receiveCompletion: { completion in
print(completion)
}, receiveValue: {
print($0)
})
所以我将 .sink() 闭包 替换为 .subscribe(Subscribers.Sink()),如下所示。它工作正常。 但问题是我不明白为什么它可以正常工作。 :( 在我看来是一样的。 这两个代码有什么区别?什么时候可以使用 .sink(),什么时候不可以?
Future<Int, Never> { promise in
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
promise(.success(1))
}
}
.receive(on: DispatchQueue.main)
.subscribe(Subscribers.Sink(receiveCompletion: { completion in
print(completion)
}, receiveValue: {
print($0)
}))
提前致谢。
【问题讨论】:
-
有趣的问题!我不知道答案,但我可以告诉你代码是mass noun,所以这些不称为“代码”。相反,它们是“代码片段”。 ????♂️