mirror of
https://github.com/pointfreeco/swift-composable-architecture.git
synced 2025-12-20 09:11:33 +01:00
* Make sure debounced values are delivered on specified scheduler. * fix deferring too * wip
31 lines
1023 B
Swift
31 lines
1023 B
Swift
import Combine
|
|
|
|
extension Effect {
|
|
/// Returns an effect that will be executed after given `dueTime`.
|
|
///
|
|
/// ```swift
|
|
/// case let .textChanged(text):
|
|
/// return environment.search(text)
|
|
/// .deferred(for: 0.5, scheduler: environment.mainQueue)
|
|
/// .map(Action.searchResponse)
|
|
/// ```
|
|
///
|
|
/// - Parameters:
|
|
/// - upstream: the effect you want to defer.
|
|
/// - dueTime: The duration you want to defer for.
|
|
/// - scheduler: The scheduler you want to deliver the defer output to.
|
|
/// - options: Scheduler options that customize the effect's delivery of elements.
|
|
/// - Returns: An effect that will be executed after `dueTime`
|
|
public func deferred<S: Scheduler>(
|
|
for dueTime: S.SchedulerTimeType.Stride,
|
|
scheduler: S,
|
|
options: S.SchedulerOptions? = nil
|
|
) -> Effect {
|
|
Just(())
|
|
.setFailureType(to: Failure.self)
|
|
.delay(for: dueTime, scheduler: scheduler, options: options)
|
|
.flatMap { self.receive(on: scheduler) }
|
|
.eraseToEffect()
|
|
}
|
|
}
|