node.js 继续执行而不等待 require 完成。
node.js continues execution without waiting for a require to complete.
我正在尝试访问所需节点文件中的变量。然而,需要它的文件总是继续而不等待变量被设置。如何让 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 的输出,即使 require 调用也是如此。
让应用程序等待数据库完成后再继续的最佳方法是什么,这样我就可以访问 db.coffee 中的记录变量。感谢您的帮助。
某种意义上db.coffee
已经完成了。该文件中的所有代码都已执行。
只是你想要的records
还没有,因为负责获取它的函数albums.find
需要第三个参数(err, data)
,这是一个函数和当猫鼬实际上在数据库中找到您的记录时,它会在很久以后被调用。这是一个磁盘操作,因此这就是 Nodejs 的异步特性大放异彩的地方,因为它使您能够 "move on" 并在 mongoose 获取所述数据的同时继续执行其他事情。
所以实际上,你不想依赖 db.coffee
完成,你真正想要等待的是你的 albums.find
函数调用你作为第三个传递给它的回调参数 - (err, data)
从您的 db.coffee
而不是记录中导出 albums
本身更有意义。
albums = mongoose.model('albums', schema)
module.export = albums;
然后在您的 app.coffee
中,您将执行 fetching/finding 记录:
albums = require('./db')
albums.find({}, {}, (err, data) ->
if err?
console.log("Error: failure to retrieve albums.")
return
else
console.log(records)
);
我正在尝试访问所需节点文件中的变量。然而,需要它的文件总是继续而不等待变量被设置。如何让 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 的输出,即使 require 调用也是如此。
让应用程序等待数据库完成后再继续的最佳方法是什么,这样我就可以访问 db.coffee 中的记录变量。感谢您的帮助。
某种意义上db.coffee
已经完成了。该文件中的所有代码都已执行。
只是你想要的records
还没有,因为负责获取它的函数albums.find
需要第三个参数(err, data)
,这是一个函数和当猫鼬实际上在数据库中找到您的记录时,它会在很久以后被调用。这是一个磁盘操作,因此这就是 Nodejs 的异步特性大放异彩的地方,因为它使您能够 "move on" 并在 mongoose 获取所述数据的同时继续执行其他事情。
所以实际上,你不想依赖 db.coffee
完成,你真正想要等待的是你的 albums.find
函数调用你作为第三个传递给它的回调参数 - (err, data)
从您的 db.coffee
而不是记录中导出 albums
本身更有意义。
albums = mongoose.model('albums', schema)
module.export = albums;
然后在您的 app.coffee
中,您将执行 fetching/finding 记录:
albums = require('./db')
albums.find({}, {}, (err, data) ->
if err?
console.log("Error: failure to retrieve albums.")
return
else
console.log(records)
);