JavaScript条件语句异常:仅cleanup_batch触发邮件,importing无响应
问题修复:IF语句逻辑错误导致仅
cleanup_batch状态触发邮件 问题根源
你的IF条件存在逻辑运算符优先级问题:&&的优先级高于||,原条件实际被解析为:
(mmRightNow - mmTimeUpdatedAt >= notificationTime && rowWorkFlow === "importing") || (rowWorkFlow === "cleanup_batch")
这会导致两种不符合预期的情况:
- 只要状态是
cleanup_batch,无论时间差是否达标都会触发邮件 - 状态是
importing时,必须同时满足时间差达标才会触发,若notificationTime设置错误或时间差未满足,就不会触发
而你需要的逻辑应该是:时间差达标,并且状态为importing或cleanup_batch,这需要用括号包裹两个状态的判断,确保和时间条件的逻辑关系正确。
修正后的代码
function sendEmail() { var rows = SpreadsheetApp.getActiveSheet().getDataRange().getValues() var flatrows = SpreadsheetApp.getActiveSheet().getDataRange().getValues().flat(); var pendingCounter = flatrows.filter(x => x == 'created').length; rows.forEach(function(row, index) { // 修正变量名冲突:将循环参数从rows改为row if (index !== 0) { var rowId = row[0] var rowUpdatedAt = new Date(row[3]) var mmTimeUpdatedAt = rowUpdatedAt.getTime() var rowProgress = row[5] var rowWorkFlow = row[6] var rightNow = new Date() var mmRightNow = rightNow.getTime() // 修正逻辑:时间差达标 且 状态为importing/cleanup_batch if (mmRightNow - mmTimeUpdatedAt >= notificationTime && (rowWorkFlow === "importing" || rowWorkFlow === "cleanup_batch")) { MailApp.sendEmail(email, "IMPORTANT: Canvas SIS Import Notification", "Hello, SIS import " + rowId + " is taking longer than expected. It is in the " + rowWorkFlow + " work flow state and is at " + rowProgress + " progress. You also have " + pendingCounter + " pending imports.If you would like to abort it, go to your SIS Import Notification Google Sheet and go to Canvas in the tool bar, click on Abort SIS Import and type in " + rowId + ". If you would like to abort all pending SIS imports as well, go to your SIS Import Notification Google Sheet and go to Canvas in the tool bar, click on Abort All Pending SIS Imports." ) } else if (rowWorkFlow === "failed" || rowWorkFlow === "failed_with_messages") { MailApp.sendEmail(email, "IMPORTANT: Canvas SIS Import Notification", "Hello, SIS import " + rowId + " has " + rowWorkFlow + ". Just a friendly heads up!" ) } else { return } } }) };
额外提示
- 循环参数名
rows和外层数组变量重名,容易造成逻辑混淆,已改为row - 可检查
notificationTime的单位是否正确(比如是毫秒还是秒),确保时间差判断符合预期
内容的提问来源于stack exchange,提问作者Kyle Cole
相关产品推荐
相关产品推荐

