fix: 修复ComfyUI队列API响应格式解析问题
- 修复WebSocket错误消息解析失败问题,支持更多错误字段格式 - 改进执行错误处理,收到错误时立即中断而不是等待超时 - 修复ComfyUI队列API响应格式不匹配问题,支持数组格式的队列数据 - 添加灵活的队列项解析逻辑,支持整数和字符串类型的prompt_id - 在EventEmitter中添加错误存储功能,支持实时错误状态检查 - 更新所有相关的队列状态转换代码 解决的问题: 1. WebSocket消息解析错误:missing field 'message' 2. 执行错误后仍等待超时的问题 3. 队列API响应解析错误:invalid type integer/string expected 4. 批量处理中错误统计不准确的问题
This commit is contained in:
@@ -9,6 +9,7 @@ use crate::types::{ExecutionProgress, ExecutionResult, ExecutionError, Execution
|
||||
#[derive(Clone)]
|
||||
pub struct EventEmitter {
|
||||
callbacks: Arc<RwLock<HashMap<String, Arc<dyn ExecutionCallbacks>>>>,
|
||||
last_error: Arc<RwLock<Option<ExecutionError>>>,
|
||||
}
|
||||
|
||||
impl EventEmitter {
|
||||
@@ -16,6 +17,7 @@ impl EventEmitter {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
callbacks: Arc::new(RwLock::new(HashMap::new())),
|
||||
last_error: Arc::new(RwLock::new(None)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +59,12 @@ impl EventEmitter {
|
||||
|
||||
/// Emits an error event
|
||||
pub async fn emit_error(&self, error: ExecutionError) {
|
||||
// Store the error for later retrieval
|
||||
{
|
||||
let mut last_error_guard = self.last_error.write().await;
|
||||
*last_error_guard = Some(error.clone());
|
||||
}
|
||||
|
||||
let callbacks_map = self.callbacks.read().await;
|
||||
for callback in callbacks_map.values() {
|
||||
callback.on_error(error.clone());
|
||||
@@ -74,6 +82,18 @@ impl EventEmitter {
|
||||
let mut callbacks_map = self.callbacks.write().await;
|
||||
callbacks_map.clear();
|
||||
}
|
||||
|
||||
/// Gets the last execution error and clears it
|
||||
pub async fn get_last_error(&self) -> Option<ExecutionError> {
|
||||
let mut error_guard = self.last_error.write().await;
|
||||
error_guard.take()
|
||||
}
|
||||
|
||||
/// Clears the last error
|
||||
pub async fn clear_last_error(&self) {
|
||||
let mut error_guard = self.last_error.write().await;
|
||||
*error_guard = None;
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for EventEmitter {
|
||||
|
||||
Reference in New Issue
Block a user