zigar.function.AbortSignal - chung-leong/zigar GitHub Wiki
Struct that acts as an interface to a JavaScript AbortSignal
object.
Usage
const std = @import("std");
const zigar = @import("zigar");
const Promise = zigar.function.Promise(error{Aborted}!void);
pub fn start() !void {
try zigar.thread.use();
}
pub fn stop() void {
zigar.thread.end();
}
pub fn idle(promise: Promise, signal: zigar.function.AbortSignal) !void {
const thread = try std.Thread.spawn(.{}, spin, .{ promise, signal });
thread.detach();
}
pub fn spin(promise: Promise, signal: zigar.function.AbortSignal) void {
while (signal.off()) {}
promise.resolve(error.Aborted);
}
import { idle, start, stop } from './abort-signal-example-1.zig';
try {
start();
const controller = new AbortController();
const { signal } = controller;
setTimeout(() => controller.abort(), 200);
await idle({ signal });
} catch (err) {
console.log(err);
} finally {
stop();
}
[Error: Aborted] { number: 169 }
Struct fields:
ptr
:*const volatile i32
Functions: