Выполнение обещания в JS - PullRequest
0 голосов
/ 03 мая 2018

У меня есть функция, расположенная в /models/profile.js:

module.exports = {
    getDataProfil : function(id_user){
        connection.query("SELECT * FROM user WHERE id_user = ?", [id_user], function(err, rows, fields){
            if(err) throw err;
            console.log(rows[0]);

        });
    }
}

Я хочу вызвать getDataProfile внутри /controllers/profile.js

module.exports.profil_get = function(req, res, next) {
    profile_model.getDataProfil(req.user.id_user).then();


}

Я хочу реализовать обещание там, так как мне нужно отобразить страницу. Как это сделать? Thankyou

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Использование нативных обещаний:

module.exports = {
  getDataProfile : function ( id_user ) {
    return new Promise( ( resolve, reject ) => {
      connection.query( 'SELECT * FROM user WHERE id_user = ?', [ id_user ], function ( err, rows, fields ) {
        if ( err ) {
          return reject( err );
        }
        return resolve( rows[ 0 ] );
      } );
    } );
  }
};

Затем вы можете позвонить по вашему обещанию и обработать ответы / ошибки. В идеале вы должны отвечать клиенту вместо использования console.log/error:

module.exports.profile_get = function(req, res, next) {
  profile_model.getDataProfile(req.user.id_user).then( response => {
    console.log( response );
  }).catch( err => {
    console.error( err );
  });
};
0 голосов
/ 03 мая 2018

Просто используйте собственный конструктор Promise:

module.exports = {
    getDataProfil : function(id_user) {
      return new Promise(function (resolve, reject) {
        connection.query("SELECT * FROM user WHERE id_user = ?", [id_user], function (err, rows, fields) {
            if (err) return reject(err);
            return resolve(rows[0]);
        });
      })
    }
}
0 голосов
/ 03 мая 2018

Используйте это, Вы также можете использовать q модуль тоже.

module.exports = {
  getDataProfil: function(id_user) {
    connection.query("SELECT * FROM user WHERE id_user = ?", [id_user], function(err, rows, fields) {
      if (err) return ['err', err];
      return [null, rows[0]];
    });
  }
}

А profil_get будет:

module.exports.profil_get = function(req, res, next) {
  profile_model.getDataProfil(req.user.id_user)
    .then(function(res) {
      console.log(res);
    });
}

Проверьте, является ли res[0] значением null для успеха или строкой для отказа.

Другая реализация

module.exports = {
  getDataProfil: function(id_user) {
    var dfd = q.defer();
    connection.query("SELECT * FROM user WHERE id_user = ?", [id_user], function(err, rows, fields) {
      if (err) { dfd.reject(err); }
      else { dfd.resolve(rows[0]); }
    });
  }
  return dfd.promise;
}

А profil_get:

module.exports.profil_get = function(req, res, next) {
  profile_model.getDataProfil(req.user.id_user)
    .then(function(res) {
      console.log(res);
    })
    .catch(function(err){
       console.log(err);
     });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...