Это / будет с опциональным оператором цепочки , новым в ES2020 (доступным через транспиляцию сегодня). код будет выглядеть так (это помогает только с parseInt
cas):
let language = getRowElementFromText('Language', html)?.find('a').text();
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^
let pageText = getRowElementFromText('Page', html)?.text();
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^
let pages = pageText ? parseInt(pageText) : undefined;
language
будет undefined
, если элемент не найден.
Если вы не можете его использовать (потому что в ваших целевых средах его еще нет и вы не транспилируете), вы можете передать функцию, которую getRowElementFromText
вызовет, если элемент будет найден:
let html = $(response.body);
let language = getRowElementFromText('Language', html, el => el.find('a').text());
let pages = getRowElementFromText('Page', html, el => parseInt(el.text()));
getRowElementFromText
будет выглядеть так:
function getRowElementFromText(text, html, callback) {
const result = /*...existing logic...*/;
return result === undefined ? undefined : callback(result);
}
Или, возможно, так (callback
необязательно):
function getRowElementFromText(text, html, callback) {
const result = /*...existing logic...*/;
return !callback || result === undefined ? result : callback(result);
}
Примечание: В приведенном выше примере я предполагаю, что getRowElementFromText
действительно возвращает undefined
в некоторых случаях («не найдено»), а в других случаях возвращает объект jQuery (найдено) . Я отмечаю это, потому что, если он всегда возвращает объект jQuery (который может быть пустым), объекты jQuery никогда не являются ложными (даже пустыми).