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:


Abort Signal