fix(#2): Promise泄漏 — confirm/prompt 添加10秒安全超时,防止永不resolve
This commit is contained in:
+13
-5
@@ -746,6 +746,10 @@ const meToast = {
|
||||
}
|
||||
|
||||
return new Promise((resolve) => {
|
||||
let resolved = false;
|
||||
const safeResolve = (val) => { if (!resolved) { resolved = true; clearTimeout(safetyTimeout); resolve(val); } };
|
||||
const safetyTimeout = setTimeout(() => safeResolve(false), 10000);
|
||||
|
||||
const t = this._emit({
|
||||
...opts,
|
||||
type: opts.type || 'warning',
|
||||
@@ -764,14 +768,14 @@ const meToast = {
|
||||
if (confirmBtn) {
|
||||
confirmBtn.addEventListener('click', () => {
|
||||
t.close();
|
||||
resolve(true);
|
||||
safeResolve(true);
|
||||
});
|
||||
}
|
||||
|
||||
if (cancelBtn) {
|
||||
cancelBtn.addEventListener('click', () => {
|
||||
t.close();
|
||||
resolve(false);
|
||||
safeResolve(false);
|
||||
});
|
||||
}
|
||||
}, 0);
|
||||
@@ -791,6 +795,10 @@ const meToast = {
|
||||
}
|
||||
|
||||
return new Promise((resolve) => {
|
||||
let resolved = false;
|
||||
const safeResolve = (val) => { if (!resolved) { resolved = true; clearTimeout(safetyTimeout); resolve(val); } };
|
||||
const safetyTimeout = setTimeout(() => safeResolve(null), 10000);
|
||||
|
||||
const t = this._emit({
|
||||
...opts,
|
||||
type: opts.type || 'info',
|
||||
@@ -813,7 +821,7 @@ const meToast = {
|
||||
input.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Enter') {
|
||||
t.close();
|
||||
resolve(input.value);
|
||||
safeResolve(input.value);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -821,14 +829,14 @@ const meToast = {
|
||||
if (submitBtn) {
|
||||
submitBtn.addEventListener('click', () => {
|
||||
t.close();
|
||||
resolve(input?.value || null);
|
||||
safeResolve(input?.value || null);
|
||||
});
|
||||
}
|
||||
|
||||
if (cancelBtn) {
|
||||
cancelBtn.addEventListener('click', () => {
|
||||
t.close();
|
||||
resolve(null);
|
||||
safeResolve(null);
|
||||
});
|
||||
}
|
||||
}, 0);
|
||||
|
||||
Reference in New Issue
Block a user