как в консоли записать возвращаемое значение из обещания Sequelize

#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