Почему 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;
}
}