Написал несколько строк роутера, потом пришла идея переписать его на async/await
, собственно вопрос несколько:
async/await
?На вход идет модель User, точнее её классовые методы. //User.options.classMethods
В качетсве ORM идет Sequelize.
С async/await
:
module.exports = function(User) {
router.post(`/signin`, async function(req, res) {
const {name, password} = req.body;
const user = await User.getUser({name});
if(user == null) {
let createdUser = await User.createUser({name, password});
res.status(200).json({createdUser, msg: 'account created succeffully'});
} else {
res.status(422).json({"error": `user ${name} exists`});
}
});
return router;
}
Без async/await
:
module.exports = function(User) {
router.post(`/signin`, function(req, res) {
const {name, password} = req.body;
User.getUser({name: name}).then(user => {
if(user == null){
User.createUser({name, password})
.then(user => {
res.status(200).json({user, msg: 'account created succeffully'});
});
} else {
res.status(422).json({"error":`user ${name} exists`});
}
});
});
return router;
}
Смысл в async/await
есть, т.к. с ним код будет более читаемый. А следовательно и его будет легче поддерживать.
Я бы сказал, что сейчас вложенные промисы это как раз плохая практика. С ними ваш код превращается в promise hell. Почти как callback hell. Лучше всего перейти на async/await.
В плане I/O оба куска неблокирующие, т.к. async/await это обёртка над промисами. А промисы под капотом уже запускаются в отдельной очереди задач. Но нужно не забывать, что некоторые независисмые операции можно объединить через Promise.all()
.
И ещё нужно не забывать про обработку ошибок. В ноде сейчас необработанные ошибочные промисы не закрывают аварийно процесс. Поэтому нужно установить обработчик unhandledRejection
. Также, если вы пишете роутер, то можете использовать готовый middlewaare для async/await обработчиков, async-middleware
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»
Ситуация проста: есть некий html-код, который должен выводиться юзеруНо код этот может генерировать кто угодно, поэтому я использую iframe в режиме...
Вопрос такой, есть цикл при котором мы выводим все что нашли в массиве
Как при наведении на ячейку таблицы с числами в JS подсветить еще например 3 ячейки, близких по значению к основной? Меня интересует не готовое...