node.js - 无法使用 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;
}
解决方案
我需要更多地了解从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
那么您可能无法更改其已解决的对象。
推荐阅读
- java - 使用处理连接到 Microsoft Access 数据库
- laravel - 使用索引的子元素的 Laravel Dusk 选择器
- arabic - Openwayback 搜索不适用于 URL 中的阿拉伯网站
- java - 应用因违反我们的恶意行为或用户数据政策而被 Google Play 拒绝
- c - MacOS Mojave 中的 C 标头在哪里?
- android - SQLite 或文本文件可以更快地在 Android 中存储传感器数据吗?
- java - SAML SSO 与基于 Struts 2 的应用程序集成,使其作为服务提供者工作
- javascript - 使用 swal 删除对 sql 的操作
- android - 替换 Intent 数据中的 char
- unity3d - Unity - 粒子边界与粒子大小不匹配