feat: prevent cycle emit in slot (#10539)

This commit is contained in:
Saul-Mirone
2025-03-01 08:10:41 +00:00
parent 2b0c91b58b
commit 7527d36547
2 changed files with 25 additions and 8 deletions

View File

@@ -14,16 +14,24 @@ export class Slot<T = void> implements Disposable {
}
emit(v: T) {
// Prevent recursive emit calls
if (this._emitting) {
return;
}
const prevEmitting = this._emitting;
this._emitting = true;
this._callbacks.forEach(f => {
try {
f(v);
} catch (err) {
console.error(err);
}
});
this._emitting = prevEmitting;
try {
this._callbacks.forEach(f => {
try {
f(v);
} catch (err) {
console.error(err);
}
});
} finally {
this._emitting = prevEmitting;
}
}
on(callback: (v: T) => unknown): Disposable {