Дима
Просто совсем еще неразобрался с async/await
Дима
А решить проблему хотелось элегантно и красиво
Дима
router.get('/', async function(req, res, next) { mongoose.connect(url); var User = mongoose.model("User", userScheme); try{ var users = await User.find({}) .then(data => data) .catch(err => err); } catch(err){} res.render('user/index', {title: "Users", users: users}); });
Vitaliy
catch(err){} так лучше не оставлять
Дима
Без try/catch не получится данные получить?
Алексей
Просто у тебя будет ошибка не перехваченная
Алексей
Алексей
router.get('/', async function(req, res, next) { mongoose.connect(url); var User = mongoose.model("User", userScheme); try{ var users = await User.find({}) .then(data => data) .catch(err => err); } catch(err){} res.render('user/index', {title: "Users", users: users}); });
.then(data => data) .catch(err => err); лишнее async/await для того что-бы код выглядел синхронно, попробуйте сначала на простых промисах, т.к. под капотом у async/await промисы и важно понимать как они работают
Таймураз
Посмотрел весь код Надо catch убрать:)
Vitaliy
+ за это
Дима
Вуаля
Алексей
а разве под капотом не функции-генераторы?
я немного не то имел ввиду Цель функций async/await упросить использование promises синхронно и воспроизвести некоторое действие над группой Promises. Точно так же как Promises подобны структурированным callback-ам, async/await подобна комбинации генераторов и promises. https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/async_function
Дима
в 3 строки )
Дима
router.get('/', async (req, res, next) => { mongoose.connect(url); var users = await mongoose.model("User", userScheme).find({}).then(data => data); res.render('user/index', {title: "Users", users: users}); });
Дима
эээ, но в редакторе 3 )
Алексей
.then(data => data) бесполезная строчка. Вы берёте результат await mongoose.model("User", userScheme).find({}) и ничего с ним не делая возвращаете его же
Дима
Спасибо всем, рад очень ) Но буду восполнять пробелы в async/await
Vitaliy
.then(data => data) убери
Артём
Есть тут те, кто работал с https://github.com/zerobias/telegram-mtproto ??
Дима
router.get('/', async (req, res, next) => { mongoose.connect(url); var users = await mongoose.model("User", userScheme).find({}); res.render('user/index', {title: "Users", users: users}); }); Совсем не плохо теперь
Vitaliy
ну без try catch не оч правильно
Vitaliy
так как к фишкам async/await относится и использование стандартных try/catch/ finally
Дима
ну без try catch не оч правильно
т.е. если потенциально данный не будет, то будет ошибка?
Vitaliy
да будет сров ошибки которую ты не обработаеш
Дима
так как к фишкам async/await относится и использование стандартных try/catch/ finally
про finally вообще не читал, добавлю себе в список для чтния
Vitaliy
но наверное не при отсутсвии даных, а при действительно ошибке самой бд
Vitaliy
а не обработаная ошибка крашит прогу
Alexey
а не обработаная ошибка крашит прогу
// Connecting there... const User = mongoose.model("User", userScheme); router.get('/', function(req, res) { User.find({}) .then(users => users) .catch(error => []); .then(users => res.render('user/index', {title: "Users", users: users})); });
Alexey
Что-то вроде этого
Roman
https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5
Alexey
а не обработаная ошибка крашит прогу
// Connecting there... const User = mongoose.model("User", userScheme); router.get('/', async function(req, res) { let users; try { users = await User.find({}); } catch (error) { users = []; } if (users && users.length) { res.render('user/index', { title: "Users", users: users }); } else { res.render('user/index', { title: "Users", errors: [] }); } });
Alexey
Или так, например
Alexey
next аргумент, смотря на этот конкретный случай, не нужен
Vitaliy
да ну все же было бы хорошо может
Vitaliy
} catch (error) { users = []; console.warn(error); } типо такого
Vitaliy
понять в чем ошибка и всякое такое
Alexey
Ага, там на усмотрение разработчика, как лучше обрабатывать эту ошибку
Vitaliy
ну да, я про то что ее нужно как-то обработать сам error
Alexey
ну да, я про то что ее нужно как-то обработать сам error
User.find({}) .then(users => users) // Тут справедливо заметили, что это можно опустить, если нет какой-либо дополнительной обработки .catch(error => []); .then(users => res.render('user/index', {title: "Users", users: users}));
Vitaliy
только хотел сказать ;))
Alexey
только хотел сказать ;))
// Connecting there... const User = mongoose.model("User", userScheme); router.get('/', async (req, res, next) => { let users; try { users = await User.find({}); } catch (error) { users = []; } res.locals.users = users; next(); }, (req, res) => { const { users } = res.locals; if (users && users.length) { res.render('user/index', { title: "Users", users: users }); } else { res.render('user/index', { title: "Users", errors: [] }); } });
Alexey
Пример с использованием middleware`а
Vitaliy
а async??
Alexey
Alexey
Поправил
Vitaliy
n1
Alexey
Пользователи обычно во многих местах необходимы, можно вынести это в отедельную логику, не зависимо от этого роута
Alexey
Вариант масса, в общем
Alexey
Плюс, http://expressjs.com/en/guide/error-handling.html
Александр
ребят я не спец, но какие нюансы, и какие bestPractices для опираций с числами? я тут нашел у себя багу: node > 18 * 1.9 34.199999999999996 > 18 * 19 / 10 34.2 В других языках (dart, python, swift) идет умножение на 1.9 верно
Dima
Да! Плюсую. Интересная тема.
Alexey
db.models.find({}, { comments: 1 }).pretty()
Mykola
https://github.com/josdejong/mathjs не юзал либу но вроде об этом
Nikita
https://github.com/josdejong/mathjs не юзал либу но вроде об этом
Либа для сложных вычислений и человек не может победить стандарт по числам.
Mykola
Либа для сложных вычислений и человек не может победить стандарт по числам.
в песочнице на сайте какие-то вычисления округляет нормально. а так да. "Это не баг, а фича" 😊
Igor
только перестал ставить ; и набросили г на вентилятор
Igor
Конец спорам о том, нужно ли использовать точки с запятыми в JavaScript: TC39 рекомендует не полагаться на ASI (алгоритм автоматической расстановки точек с запятыми) и ставить ; всегда — https://github.com/tc39/ecma262/pull/1062
Dmitry
Хъюстон, у нас проблемы
Valeriu
Можно регистрировать пользователя в Telegram через API?
Valeriu
Спрашиваю потому что видел в WEB версий что пишет что регистрацию нужно пройти через приложение iOS или Android
Alexander
Народ, не силён в регулярках. Вот это можно как-то оптимизировать? description = description .replace(/(<br\s*\/>)|(<\/p>\s*|\n*<p>)/gm, "\n") // Paragraph .replace(/<(?:.|\n)*?>/gm, "") .trim(); Что-то мне подсказывает, что это "дорого" работает.
Narek
regex101.com
Rafael 🌵
debuggex еще есть
Alexander
regex101.com
я был там ))
Anonymous
гайз, я тут пробую освоить`jwt` я скину серию скриншотиков
Anonymous
Anonymous
Anonymous