Skip to content

PrintQueue API

打印队列管理器,支持优先级排序、失败重试和并发控制。

导入

typescript
import { PrintQueue } from 'taro-bluetooth-print';

创建实例

typescript
const queue = new PrintQueue({
  maxConcurrent: 1,      // 最大并发数
  retryCount: 3,         // 重试次数
  retryDelay: 1000       // 重试延迟 ms
});

方法

队列操作

enqueue(job: PrintJob): string

添加打印任务到队列,返回任务 ID。

typescript
const jobId = queue.enqueue({
  deviceId: 'device-id',
  data: printData,
  priority: 'normal'  // 'high' | 'normal' | 'low'
});

dequeue(): PrintJob | undefined

取出下一个任务。

typescript
const job = queue.dequeue();

peek(): PrintJob | undefined

查看下一个任务(不移除)。

typescript
const nextJob = queue.peek();

任务管理

cancel(jobId: string): boolean

取消指定任务。

typescript
queue.cancel(jobId);

retry(jobId: string): boolean

重试指定任务。

typescript
queue.retry(jobId);

clear(): void

清空队列。

typescript
queue.clear();

状态查询

size(): number

获取队列大小。

typescript
const count = queue.size();

isEmpty(): boolean

检查队列是否为空。

typescript
if (queue.isEmpty()) {
  console.log('队列为空');
}

getStatus(jobId: string): JobStatus | undefined

获取任务状态。

typescript
const status = queue.getStatus(jobId);
// 'pending' | 'running' | 'completed' | 'failed' | 'cancelled'

getStats(): QueueStats

获取队列统计信息。

typescript
const stats = queue.getStats();
console.log(`待处理: ${stats.pending}, 完成: ${stats.completed}, 失败: ${stats.failed}`);

事件

typescript
queue.on('job-added', (job) => {
  console.log('任务添加:', job.id);
});

queue.on('job-started', (job) => {
  console.log('任务开始:', job.id);
});

queue.on('job-completed', (job) => {
  console.log('任务完成:', job.id);
});

queue.on('job-failed', (job, error) => {
  console.log('任务失败:', job.id, error);
});

queue.on('queue-empty', () => {
  console.log('队列已空');
});

类型定义

PrintJob

typescript
interface PrintJob {
  id?: string;                    // 任务 ID(可选,自动生成)
  deviceId: string;               // 目标设备 ID
  data: Uint8Array;               // 打印数据
  priority?: 'high' | 'normal' | 'low';  // 优先级,默认 'normal'
  retries?: number;               // 重试次数
  createdAt?: number;             // 创建时间
  metadata?: Record<string, unknown>;  // 自定义元数据
}

QueueStats

typescript
interface QueueStats {
  pending: number;    // 待处理
  running: number;    // 执行中
  completed: number;  // 已完成
  failed: number;     // 已失败
  cancelled: number;  // 已取消
}

完整示例

typescript
import { PrintQueue } from 'taro-bluetooth-print';

const queue = new PrintQueue({
  maxConcurrent: 2,
  retryCount: 3,
  retryDelay: 1000
});

// 监听事件
queue.on('job-completed', (job) => {
  console.log(`任务 ${job.id} 完成`);
});

queue.on('job-failed', (job, error) => {
  console.error(`任务 ${job.id} 失败:`, error);
});

// 添加高优先级任务
queue.enqueue({
  deviceId: 'printer-1',
  data: receiptData,
  priority: 'high'
});

// 添加普通任务
queue.enqueue({
  deviceId: 'printer-1',
  data: labelData,
  priority: 'normal'
});

// 处理队列
while (!queue.isEmpty()) {
  const job = queue.dequeue();
  // 执行打印...
}

基于 MIT 许可发布