我正在尝试访问必需的节点文件中的变量。但是,需要它的文件总是在不等待变量设置的情况下继续运行。如何让app.coffee等待才能继续?
我有两个文件:
db.coffee:
databaseUrl = 'mongodb://localhost/db'
mongoose = require('mongoose')
mongoose.connect(databaseUrl)
db = mongoose.connection
records = []
db.on('error', console.error.bind(console, 'connection error:'))
db.once('open', () ->
console.log('Connected to database: ', databaseUrl)
)
schema = new mongoose.Schema({play_counts: {type: Number}, album_name: {type: String }})
albums = mongoose.model('albums', schema)
albums.find({}, {}, (err, data) ->
if err?
console.log("Error: failure to retrieve albums.")
return
else
records = data
)
console.log(records)
module.export = records
和app.coffee:
db = require('./db')
console.log(db)
当我运行app.coffee时,我从控制台登录应用程序中获得了[]的输出,然后是db.coffee的输出,即使需要调用也是如此。
什么是让应用程序等待db完成然后再继续的最佳方法,因此我可以访问db.coffee中的record变量。谢谢你的帮助。
从某种意义上说db.coffee
已经完成了。该文件中的所有代码均已执行。
只是您想要的东西records
不可用,因为负责获取它的函数albums.find
需要第三个参数(err, data)
,这是一个函数,当猫鼬实际上在数据库中找到您的记录时,它就会被调用。这是一个磁盘操作,因此这是Nodejs异步性质的亮点,因为它使您能够在猫鼬获取上述数据的同时“继续前进”并继续执行其他操作。
因此,实际上,您并不想依赖于db.coffee
完成,实际上您albums.find
要等待的是函数调用了您作为第三个参数传递的回调:(err, data)
albums
从您的位置db.coffee
而不是从记录中导出本身会更有意义。
albums = mongoose.model('albums', schema)
module.export = albums;
然后在您中app.coffee
进行获取/查找记录:
albums = require('./db')
albums.find({}, {}, (err, data) ->
if err?
console.log("Error: failure to retrieve albums.")
return
else
console.log(records)
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句