Я практикую асинхронность в node.js с использованием экспресс-фреймворка. Моя проблема не в компиляции, так как код работает, моя проблема не в том, действительно ли выполняется асинхронность. Я выполнил код двумя способами, и он работает в обоих случаях, но я не знаю, какой из них правильный.
Код 1 (асинхронное ожидание на модели):
//Función alojada en el archivo FriendController
FriendController.deleteFriendById = (req, res) => {
const id = parseInt(req.params.id);
FriendModel.deleteFriendById(id, (err) => { //llamo al modelo
if(err) throw err;
else res.send('Usuario borrado');
})
}
//Función alojada en el archivo FriendModel
FriendModel.deleteFriendById = async (id, callback) => {
await pool.query(`delete from amigos where id = '${id}'`, callback);
}
Код 2 (асинхронное ожидание на контроллере):
//Función alojada en el archivo FriendController
FriendController.deleteFriendById = async (req, res) => {
const id = parseInt(req.params.id);
await FriendModel.deleteFriendById(id, (err) => { //llamo al modelo
if(err) throw err;
else res.send('Usuario borrado');
})
}
//Función alojada en el archivo FriendModel
FriendModel.deleteFriendById = (id, callback) => {
pool.query(`delete from amigos where id = '${id}'`, callback);
}
Код 3 (аналогично коду 2, но с изменениями):
//Función alojada en el archivo FriendController
FriendController.deleteFriendById = async (req, res) => {
try {
await FriendModel.deleteFriendById(req.params.id);
res.send('Usuario borrado');
} catch (error) {
res.send(error);
}
}
//Función alojada en el archivo FriendModel
FriendModel.deleteFriendById = (id) => {
pool.query(`delete from amigos where id = '${id}'`);
}
Какой из этих трех является правильным и почему?
Как он говорит @RichardVГ-zquerPГ©rez, лучшая prГЎctica была бы в драйвере.
Сейчас, видя ты cГіdigo, ты querГ, - чтобы комментировать, что ты перемешиваешь async/await
с callbacks
, чтобы манипулировать ею asincronГ - в NodeJS, и это не правильное, так как, чтобы манипулировать asincronia, ты можешь использовать Callbacks
, Promise
или Async/await
. Я комментирую тебе твои примеры:
//Código 2: estas usando 'callbacks' para recibir el dato, no es necesario 'async/await'
FriendController.deleteFriendById = (req, res) => {
const id = parseInt(req.params.id);
FriendModel.deleteFriendById(id, (err) => {
if(err) throw err;
else res.send('Usuario borrado');
})
}
//Còdigo 1: No te es necesario utilizar 'async/await' porque estas usando 'callback'
FriendModel.deleteFriendById = (id, callback) => {
pool.query(`delete from amigos where id = '${id}'`, callback);
}
//Este código es correcto, solo usas 'async/await' para controlar el asincronismo
FriendController.deleteFriendById = async (req, res) => {
try {
await FriendModel.deleteFriendById(req.params.id);
res.send('Usuario borrado');
} catch (error) {
res.send(error);
}
}
//Función alojada en el archivo FriendModel
FriendModel.deleteFriendById = (id) => {
pool.query(`delete from amigos where id = '${id}'`); //Esto devuelve una promesa
}
//Función alojada en el archivo FriendController
FriendController.deleteFriendById = (req, res) => {
FriendModel.deleteFriendById(req.params.id)
.then(data =>{
res.send('Usuario borrado');
})
.catch(err =>{
res.send(error);
})
}
//Función alojada en el archivo FriendModel
FriendModel.deleteFriendById = (id) => {
pool.query(`delete from amigos where id = '${id}'`); //Esto devuelve una promesa
}
, Если ты имел сомнения относительно Callbacks, Promises и Async/await, поисков форумом, который есть много documentaciГіn для того, чтобы ты смог понимать это.
Надеялся, что он помог тебе.
Приветствие