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