我有一个位于/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]);
});
}
}
我想调用/controllers/profile.js中的getDataProfile
module.exports.profil_get = function(req, res, next) {
profile_model.getDataProfil(req.user.id_user).then();
}
我想在那里实现承诺,因为我需要渲染页面。怎么做?三江源
答案 0 :(得分:2)
使用此功能,您也可以使用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);
});
}
答案 1 :(得分:1)
使用原生承诺:
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 );
});
};
答案 2 :(得分:0)
只需使用原生的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]);
});
})
}
}