#mysql #node.js #sequelize.js
#mysql #node.js #sequelize.js
Вопрос:
Я использую Sequelize и не могу записать значение promise. Я делаю, console.log('helooo', timekeep);
но он печатает Promise { <pending> }
. Я не знаю, правильно я это делаю или нет.
Это мой код:
const create = async function(req, res) {
res.setHeader('Content-Type', 'application/json');
let err, orders, wallet;
let orders_info = req.body;
console.log('order_info : <<<<<< ' JSON.stringify(orders_info));
var timekeep = Orders.findAndCountAll(
{
where: {
cid : orders_info.cid,
},
order: [
['id', 'DESC']
],
limit: 1,
}
)
.then(result => {
console.log('hello', result);
console.log(result.count);
console.log(result.rows);
});
console.log('helooo', timekeep);
}
Я получаю подобное, когда я регистрирую переменную.
helooo
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }
Ответ №1:
timekeep
это значение, которое вы возвращаете из then
предложения, которое является Promise<void>
, потому что из него не возвращается никакое значение.
Тот, result
с которым вы печатаете console.log('hello', result);
, имеет значение, которое вы хотели получить из Обещания.
Комментарии:
1. да, но я не могу использовать внешнюю функцию ‘result’
2. правильно, потому что оно определено только внутри
then
. если вы вернетеresult
и добавитеawait
передOrders.findAndCountAll
, у вас будет значение вtimekeep
Ответ №2:
Я вижу, что ваша create
функция уже является async
функцией. Итак, вместо использования синтаксиса Promise используйте синтаксис async / await. Теперь то, что вы пытаетесь сделать, это присвоить выражение запроса переменной timekeep
. Вот пример кода,
const create = async function (req, res) {
res.setHeader('Content-Type', 'application/json');
let err, orders, wallet;
let orders_info = req.body;
console.log('order_info : <<<<<< ' JSON.stringify(orders_info));
// try resolving promise
try {
var timekeep = await Orders.findAndCountAll(
{
where: {
cid: orders_info.cid,
},
order: [
['id', 'DESC']
],
limit: 1,
}
);
console.log("RESULT => ", timekeep)
} catch (err) {
// catch error here
console.log(err)
}
}
Ответ №3:
Есть незначительные проблемы с возвращаемыми данными и async await
концепцией, пожалуйста, просмотрите приведенный ниже код с комментарием :
var timekeep = await Orders.findAndCountAll({ // <----------- you need add await
where: {
cid: orders_info.cid,
},
order: [
['id', 'DESC']
],
limit: 1,
})
.then(result => {
console.log('hello', result);
console.log(result.count);
console.log(result.rows);
return resu< // <----------- also need to return the result from here
});
console.log('helooo', timekeep); // <----- Now check the console