Асинхронное ожидание в контроллере или в модели?

Я практикую асинхронность в 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}'`);
        }

Какой из этих трех является правильным и почему?

0
задан 23.11.2019, 17:33
1 ответ

Как он говорит @RichardVГ-zquerPГ©rez, лучшая prГЎctica была бы в драйвере.

Сейчас, видя ты cГіdigo, ты querГ, - чтобы комментировать, что ты перемешиваешь async/await с callbacks, чтобы манипулировать ею asincronГ - в NodeJS, и это не правильное, так как, чтобы манипулировать asincronia, ты можешь использовать Callbacks, Promise или Async/await. Я комментирую тебе твои примеры:

  • CГІdigo 1 + CГіdigo 2:

 //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); 
 }
  • CГіdigo 3:

//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
}
  • CГІdigo 4 (другой способ реализовывать консультацию с обещаниями):

//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 для того, чтобы ты смог понимать это.

Надеялся, что он помог тебе.

Приветствие

0
ответ дан 01.12.2019, 10:59

Теги

Похожие вопросы