我正在做一些查询以从数据库中检索一些数据,并试图导出要在我的nodejs应用程序中使用的数据。但是到目前为止,我所做的一切都无法正常工作。
r.js
async function site() {
var test = await db
.select("*")
.from("site_credentials")
.then(data => {
return data;
});
return test;
}
module.exports = { user: site().then(data=>{return data})}
但是我总是要等待Promise。甚至当我进行导入时:
import users = require("./r")
users.then(data=>{return data})
,仍然不起作用。我该如何解决?
谢谢
答案 0 :(得分:1)
对于初学者来说,没有理由解决承诺并立即返回在then块中解决的同一对象。如果您不需要执行其他任何操作,则只需省略“ then”即可。
所以这个:
async function site() {
var test = await db
.select("*")
.from("site_credentials")
.then(data => {
return data; <--- this isn't necessary. Only adds noise unless there is something else you need to do. It's similar to "catching" and immediately "rethrowing" an error... just pointless
});
return test;
}
可以是这样:
async function site() {
var test = await db
.select("*")
.from("site_credentials");
return test;
}
第二,我不确定您为什么要尝试在导出中解决它。只需导出函数即可。
module.exports = site;
然后,当您在应用程序中的其他位置需要它时,请调用它并在那里解决它:
const users = require("./r")
users.then(data=>{
// do something with your data here...
})
请注意,在第一个示例中,您正在导出一个对象,该对象包含函数的“ users”属性。如果这样做,则需要像这样调用它:
const users = require("./r")
users.users().then(data=>{
// do something with your data here...
})
您可以看到users.users
显然没有意义。因此,请正确导出以避免这种情况。仅导出函数本身,而不嵌套在其他对象中。
但是,如果仔细观察,您会注意到我做错的另一件事。我正在导出“站点”功能,但需要将其作为“用户”功能。命名约定很重要。如果此函数在此处称为“站点”,则应要求(或根据模块加载程序导入...)将其作为“站点” ...因此:
const site = require('./r');
否则,您只会混淆其他开发人员的初衷。