Apps Script脚本故障求助:重新分配审核人时无弹窗提示
问题排查与修复方案
1. 补全不完整的SweetAlert代码
你提供的Swal调用代码存在语法错误,缺少闭合括号与语句,导致代码无法正常执行。修复后的完整代码如下:
Swal.fire({ title: 'Select new reviewer', input: 'select', inputOptions: inputOptionsPromise, inputPlaceholder: 'Select new reviewer', showCancelButton: true, inputValidator: function(value) { return new Promise(function(resolve, reject) { if (value !== '') { resolve(); } else { reject('You need to select a reviewer'); } }) } }).then((address) => { if (address.isConfirmed) { Swal.fire({ icon: 'success', // 注意:原type参数已废弃,改用icon html: 'Reviewer has been changed to: ' + address.value }); } });
2. 修复promiseLoadout与promiseResolution的逻辑问题
promiseResolution是无限递归的同步函数,会阻塞浏览器主线程,导致后续代码(包括Swal弹窗)无法执行;同时waitFor函数未定义,selectLi和userMapping的来源不明确,重构后的代码如下:
// 实现异步等待条件满足的函数,避免阻塞 function waitFor(conditionFunc) { return new Promise(resolve => { const interval = setInterval(() => { if (conditionFunc()) { clearInterval(interval); resolve(); } }, 100); }); } async function promiseLoadout () { // 等待selectLi和userMapping初始化完成 await waitFor(() => window.selectLi != null && window.userMapping != null); // 异步获取用户数据 const data = await new Promise(resolve => { google.script.run.withSuccessHandler(resolve).convertToJson("Users"); }); const promiseOutput = {}; JSON.parse(data).forEach(obj => { promiseOutput[obj.userName] = obj.userID + "@yourdomain.com"; // 补全实际域名 }); // 直接生成可用的Promise对象 window.inputOptionsPromise = Promise.resolve(promiseOutput); } // 调用初始化函数 promiseLoadout();
3. 添加按钮点击事件绑定
确保「重新分配」>「审核人」按钮有对应的点击事件触发弹窗,假设按钮ID为assignReviewerBtn,添加如下代码:
$(document).ready(function() { $('#assignReviewerBtn').click(function() { // 确保审核人列表加载完成后再弹窗 window.inputOptionsPromise.then(options => { Swal.fire({ title: 'Select new reviewer', input: 'select', inputOptions: options, inputPlaceholder: 'Select new reviewer', showCancelButton: true, inputValidator: function(value) { return new Promise(function(resolve, reject) { value !== '' ? resolve() : reject('You need to select a reviewer'); }) } }).then((address) => { if (address.isConfirmed) { Swal.fire({ icon: 'success', html: 'Reviewer has been changed to: ' + address.value }); // 这里可添加调用google.script.run更新审核人的后端逻辑 // google.script.run.updateReviewer(address.value); } }); }).catch(err => { Swal.fire('Error', 'Failed to load reviewer list', 'error'); console.error(err); }); }); });
4. 确认依赖加载正确
确保页面已正确引入jQuery和SweetAlert2:
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
额外建议
- 打开浏览器开发者工具(F12)的Console面板查看报错信息,这是排查前端问题的核心手段。
- 避免使用
deligateMS这类同步阻塞代码,会导致页面卡顿甚至无响应。
内容的提问来源于stack exchange,提问作者user25696163
相关产品推荐
相关产品推荐

