Функция не прекращает выполнение после оператора возвратаJavascript

Форум по Javascript
Ответить
Anonymous
 Функция не прекращает выполнение после оператора возврата

Сообщение Anonymous »

В настоящее время я пишу небольшой скрипт, который будет использоваться в таблице пробега, которую я создаю для отслеживания миль для моей налоговой декларации с помощью Google Sheets и Apps Script. Я написал функцию, которую собираюсь использовать в каждой ячейке столбца, чтобы вернуть ячейке значение true или false.
В настоящее время моя функция работает. Не выдает никаких синтаксических ошибок, и с помощью отладки и ведения журнала я определил, что он достигает моих операторов возврата и функций, как и ожидалось. Основная проблема заключается в том, что он зависает после достижения оператора, пока в конечном итоге не выдаст ошибку из-за превышения максимального времени выполнения.
Я не понимаю, почему именно это не работает, поскольку это очень простая процедура. Вот код:

Код: Выделить всё

// region Logging:
const logSeperator = "--------------------------------\n";
// endregion

//region Constants

const VacationDays = [
new Date("1/1/25"),
new Date("1/20/25"),
new Date("2/17/25"),
new Date("5/26/25"),
new Date("6/19/25"),
new Date("7/4/25"),
new Date("7/4/25"),
new Date("9/1/25"),
new Date("10/13/25"),
new Date("11/11/25"),
new Date("11/27/25"),
new Date("12/25/25"),
new Date("12/26/25"),
new Date("12/27/25"),
new Date("12/31/25"),
];

// endregion

function tryReinterpretAsDate(targetObject){
console.log(Object.prototype.toString.call(targetObject))
if (Object.prototype.toString.call(targetObject) == "[object Date]"){
return new Date(targetObject);
}
return targetObject;
}

function ISWORKDAY(targetCell = 'A11') {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName("Sheet1");
console.log('Target Date Cell: %s', targetCell);
const _range = sheet.getRange(targetCell);
let val = tryReinterpretAsDate(_range.getValue());
const isDate = val instanceof Date;
console.log(`${logSeperator}Target Cell \nType: ${isDate} \nValue: ${val}\n${logSeperator}`);

if(isDate){
console.log("Target value is Date");
const dayOfWeek = val.getDay();

if (VacationDays.includes(val) || [0, 6].includes(dayOfWeek)){
console.log("Target value is a non work day... Returning false");
return "false";
};

console.log("Target value is a work day... Returning true");
return "true";
}
return "false"

};

И несколько примеров вывода:

Код: Выделить всё

3:06:27 AM Notice Execution started
3:06:27 AM Info Target Date Cell: A11
3:06:27 AM Info [object Date]
3:06:27 AM Info
--------------------------------
Target Cell
Type: true
Value: Sun Jun 15 2025 00:00:00 GMT-0400 (Eastern Daylight Time)
--------------------------------
3:06:27 AM Info Target value is Date
3:06:27 AM Info Target value is a non work day... Returning false
3:12:27 AM Error Exceeded maximum execution time
На моем листе я установил для данной ячейки значение =ISWORKDAY("A11") И получил #ERROR: превышено максимальное время выполнения (строка 0).


Подробнее здесь: https://stackoverflow.com/questions/798 ... -statement
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»