Почему return функции присваивается переменной со второго раза (node)?

У меня есть таблица в mysql, и мне нужно получить последнее непустое значение столбца. Если значение в столбце таблицы не является пустым сразу, то return функции присваивается переменной сразу, если 1 или более пустых значений в столбце таблицы, то со второго раза. Почему так происходит? Код прилагается.

function backLastData() {
    let tempo = 1
    return function getLastData(message) {
        const isEmpty = Object.values(message[message.length - tempo].dataValues).every(item => item === null || item === '' || item === "NULL");
        if (isEmpty) {
            tempo++;
            getLastData(message);
        } else {
            return message[message.length - tempo].dataValues;
        }
        return
    }
}
module.exports.backLastData = backLastData;

// получение данных из таблицы

const message3 = await dataDef.findAll({ attributes: ['message3'] });

const getLastData = backLastData();

если 1 или более пустых значений

const finalText3 = await getLastData(message3);
console.log(finalText3) - возвращает undefined
console.log(await getLastData(message3)) - возвращает верное значение

const finalText = await getLastData(message3);
console.log(finalText) - возвращает верное значение
console.log(await getLastData(message3)) - возвращает верное значение

если нет пустых значений

const finalText3 = await getLastData(message3);
console.log(finalText3) - возвращает верное значение
console.log(await getLastData(message3)) - возвращает верное значение

const finalText = await getLastData(message3);
console.log(finalText) - возвращает верное значение
console.log(await getLastData(message3)) - возвращает верное значение

Ответы (1 шт):

Автор решения: ksa

А так?

function backLastData() {
    let tempo = 1
    return function getLastData(message) {
        const isEmpty = Object.values(message[message.length - tempo].dataValues).every(item => item === null || item === '' || item === "NULL");
        if (isEmpty) {
            tempo++;
            return getLastData(message);
        }
        return message[message.length - tempo].dataValues;
    }
}

Или даже вот так

function backLastData() {
    const os = new Set([null, '', "NULL"])
    let tempo = 1
    return function getLastData(message) {
        const o = message[message.length - tempo].dataValues
        const isEmpty = Object.values(o).every(item => os.has(item));
        if (isEmpty) {
            tempo++;
            return getLastData(message);
        }
        return o;
    }
}
→ Ссылка