OpenCombine helpers for JavaScriptKit/WebAssembly APIs. Currently it provides:
JSScheduler
class that implements the Scheduler
protocol. This allows you to use
time-dependent Combine operators such as
measureInterval
,
debounce
,
throttle
,
and
timeout
in the browser environment.TopLevelDecoder
implementation on JSValueDecoder
.publisher
property on JSPromise
,
which converts your JavaScript Promise
instances to Combine publishers.Here's an example of a timer that fetches a UUID from a remote server every second, parses it
with JSValueDecoder
, and then displays the result as text:
import JavaScriptKit
import OpenCombine
import OpenCombineJS
private let jsFetch = JSObject.global.fetch.function!
func fetch(_ url: String) -> JSPromise {
JSPromise(jsFetch(url).object!)!
}
let document = JSObject.global.document
var p = document.createElement("p")
_ = document.body.appendChild(p)
var subscription: AnyCancellable?
let timer = JSTimer(millisecondsDelay: 1000, isRepeating: true) {
subscription = fetch("https://httpbin.org/uuid")
.publisher
.flatMap {
JSPromise($0.json().object!)!.publisher
}
.mapError { $0 as Error }
.map { Result<String, Error>.success($0.uuid.string!) }
.catch { Just(.failure($0)) }
.sink {
let time = JSDate().toLocaleTimeString()
switch $0 {
case let .success(uuid):
p.innerText = .string("At \(time) received uuid \(uuid)")
case let .failure(error):
p.innerText = .string("At \(time) received error \(error)")
}
}
}
This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].
link |
Stars: 30 |
Last commit: 46 weeks ago |
This release updates dependencies on OpenCombine and JavaScriptKit to their 0.13.0 versions.
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics