首页 > 解决方案 > 无法使用 sequelize 创建异步函数

问题描述

我正在尝试从我的模型中获取信息,但它总是返回我Promise { <pending> }undefined(在我尝试过的所有方式上)

这是我试图用来从数据库中检索信息的代码

const cnabBody = require('../controller/cnabBody');

let resultado = cnabBody.encontrarUm().then((r) => {
    console.log(r);
});

这是我的控制器

const CnabBody = require ('../model/cnabBody');

exports.encontrarUm = async () => {
    const { nome_campo } = await CnabBody.findOne({where:{nome_campo: "Nome do Campo"}});
    return nome_campo;
}

标签: node.js

解决方案


我需要更多地了解从findOne函数解析的对象结构,但听起来nome_campo返回的对象是一个Promise对象而不是一个值。如果是这种情况,那么您还必须await在 nome_campo 上(假设它不是未定义的)。

如果CnabBody.findOne()返回这个:

{
  nome_campo: somePromise 
}

那么您应该更改findOne为等待Promise并发送回它解析到的对象,或者您需要await在控制器中接收到它后对其进行处理。后者可以这样做:

const CnabBody = require ('../model/cnabBody');

exports.encontrarUm = async () => {
  const { nome_campo } = await CnabBody.findOne({where:{nome_campo: "Nome do Campo"}});
  if (nome_campo) return await nome_campo;  // <--- add await here if defined
}

但是我想说如果findOne可以更改(假设您可以访问代码)这样​​调用await CnabBody.findOne()返回实际结果而不是 Promise 会更好。解决Promise另一个Promise似乎是多余的,但如果您不是作者,findOne那么您可能无法更改其已解决的对象。


推荐阅读