Я новичок в node.js, и я хочу использовать обещания в своем школьном проекте. я нашел несколько вещей в Интернете и на стеке: Use promise to process MySQL return value in node.jsPromises Node.js mysql
Но у меня есть вопрос, до сих пор, это то, что у меня есть:
router.post('/matchaSearch', function(req, res) {
var username = session.uniqueID;
var searcherPackage = {};
function userAgeCheck(randomParam) {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
var query = 'SELECT username, age, orientation, sex FROM usersinfo WHERE username != ?';
connection.query(query, [username], (err, rows, fields) => {
connection.release();
return err ? reject(err) : resolve(rows);
});
});
});
}
userAgeCheck('username')
.then((rows) => {
/*console.log(rows);*/
searcherPackage = rows;
console.log(searcherPackage);
// do stuff
}).catch((err) => {
throw err;
});
});
Это работает для меня, она возвращает мне все от db кроме меня (имя пользователя). Но для меня это неправильно. Почему предоставление случайного параметра является хорошим?
Поэтому я должен указать «username» как param вместо «randomParam», но если я это сделаю, запрос вернет мне все вместо всех, кроме меня (имя пользователя). Так что я избавился от него и просто дал ему «randomParam», и он сработал. Можете ли вы это объяснить? Правильно ли я это делаю? Если это так, я могу продолжать делать свой проект. Спасибо за помощь!
В цитируемом коде не используется функция 'randomParam'. Это ваш код, не так ли? Так почему это так? Что он должен был делать? –
Вам нужно также проверить 'err' в обратном вызове' pool.getConnection'. Или, еще лучше, используйте библиотеку, такую как Bluebird, и обещайте эти методы, чтобы вы могли правильно связать их и позволить любой ошибке автоматически отклонять возвращенное обещание. – cdhowie
Не забывайте, что 'Promise.promisify' может использоваться для преобразования методов обратного вызова типа Node.js в автоматические обещания, поэтому вам не нужно писать собственную оболочку. – tadman