我是新来的和的NodeJS只熟悉Java。我试图创建一个用于创建基于数据库的对象,并将它们添加到一个数组中的文件。这阵我希望能够出口,这样我可以在整个程序中使用它,但是当我尝试将阵列导出不起作用。我试着用搜索引擎和理解,但跨越任何不幸有益的还没来。
我希望有人能帮助我理解
我试过调用“于是”呼叫后module.exports,但它只是返回一个空数组,因为它的异步。 我也曾尝试在.then调用中调用module.exports = team,但两者均无效。
var teams = [];
function assignTeamsToClasses() {
return new Promise((resolve, reject) => {
getAllTeamsInDb((teamList) => {
teamList.forEach((aTeam) => {
let newTeam = new Team(aTeam['teamid'], aTeam['teamname'], aTeam['teamrank']);
teams.push(newTeam);
});
resolve();
});
})
}
assignTeamsToClasses().then(() => {
module.exports = teams;
});
main.js
var teams = require('./initialize.js');
console.log(teams);
我希望它返回是数据库中的所有球队。我知道在“ .then”调用中调用时数组不是空的,但是导出部分却不是。
答案 0 :(得分:1)
简单
require()
+ console.log()
是同步的assignTeamsToClasses()
是异步的,即它在某个未知的稍后时间更新teams
。您必须将模块API设计为异步的,例如通过提供客户端可以订阅的事件侦听器界面或Promise接口来接收“数据库更新完成”事件。
提案:
module.exports = {
completed: new Promise(resolve =>
getAllTeamsInDb(teams => {
const result = [];
teams.each(aTeam =>
result.append(new Team(aTeam.teamid,
aTeam.teamname,
aTeam.teamrank)
)
);
resolve(result);
})
),
};
如何使用它:
const dbAPI = require('./initialize.js');
dbAPI
.completed
.then(teams => console.log(teams))
.catch(error => /* handle DB error here? */);
每个使用此API的调用者都会
result
,然后继续进行其then()
回调。