Comments (2)
Here's a snippet for posterity, note that it's slightly inconsistent with the use of Codable
due to #116:
import Foundation
import JavaScriptEventLoop
import JavaScriptKit
JavaScriptEventLoop.installGlobalExecutor()
struct Body: Codable {
let x: Int
let y: String
}
private let jsFetch = JSObject.global.fetch.function!
func fetch(_ url: String, _ options: [String: JSValue]) async throws -> JSValue {
try await JSPromise(jsFetch(url, options).object!)!.value
}
let encoder = JSONEncoder()
let decoder = JSValueDecoder()
func post<Body: Codable>(_ url: String, _ body: Body) async throws -> Body {
let data = try encoder.encode(body)
let response = try await fetch(
url,
[
"method": "POST",
"headers": ["Content-Type": "application/json"].jsValue,
"redirect": "follow",
"body": String(data: data, encoding: .utf8)!.jsValue,
]
).object!
let json = try await JSPromise(response.json!().object!)!.value
return try decoder.decode(Body.self, from: json.object!.json)
}
Also note the use of json.object!.json
, it's a peculiarity of httpbin, which I used to test this. It wraps the response in a top-level JSON structure, having body in the inner json
property. You may need to use json
instance directly with other services instead.
@lorenalexm does that resolve your issue?
from javascriptkit.
@MaxDesiatov I am so sorry for the delay in replying. Thank you so much for the explanation and code snippet, this really helped me work through my issue and build a reusable class for making network requests in my Tokamak projects! Your assistance has helped resolve my problems, thank you again.
from javascriptkit.
Related Issues (20)
- Enchancement: Add a link to the docs HOT 4
- Export function returning a JSValue HOT 2
- Arguments in JSClosure HOT 4
- JSPromise(resolver:) usage HOT 3
- Asynchronous calls in JSClosure HOT 5
- Making JSObject hashable HOT 5
- Compile error on macOS 12.2.1 HOT 6
- UserAgent support? HOT 1
- WebSockets implementation HOT 2
- Generate JavaScriptKit `.js` runtime with SwiftPM build tool HOT 6
- `JSNumber` type to support `long long` type in Web API IDL
- Occasional JSClosure has been already released by Swift side HOT 4
- Compiled module was created by a different version of the compiler; rebuild 'JavaScriptKit' and try again HOT 2
- Cannot perform DataView.prototype.setBigUint64 on a detached ArrayBuffer HOT 2
- JSClosure will be overriden from other closure HOT 1
- Are JSValue bitmasks possible? HOT 2
- `JSClosure.async` doesn't work at all
- Init `JSUInt8ClampedArray` from `[UInt8]` failed
- When targeting macOS, v0.19.0 Requires macOS 14 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from javascriptkit.