Skip to content

swiftwasm/OpenCombineJS

Folders and files

NameName
Last commit message
Last commit date
Apr 5, 2022
Sep 30, 2020
Nov 22, 2021
Sep 29, 2020
Sep 30, 2020
Sep 30, 2020
Sep 30, 2020
Apr 5, 2022
Sep 29, 2020
Apr 5, 2022
Apr 5, 2022
May 10, 2022

Repository files navigation

OpenCombineJS

OpenCombine helpers for JavaScriptKit/WebAssembly APIs. Currently it provides:

Example

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)")
      }
    }
}

Code of Conduct

This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to hello@swiftwasm.org.