对于某些特殊情况,例如'require',阻止执行,使事情更简单是有意义的。
我有类似的情况,我需要一种方法来建立数据库连接,阻止。 并且,因为它只发生一次 - 当应用程序启动并保存在全局对象中以供以后重用时 - 它不会影响性能。
问题:
实际上我已经通过使用来自jasmine-node的waitFor
来实现它,但是当我查看它的来源时 - 它非常复杂并且使用了phantomjs C-extensions。
遗憾的是,简单while(true){...}
的东西不起作用。例如,下面的代码不起作用,我相信因为它阻止了事件循环,并且不允许节点处理它等待的事件(在单线程环境中出现死锁:))。
waitsFor = (fun, message = "waitsFor timeout!", timeout = 1000) ->
start = new Date().getTime()
while true
if fun()
break
else if (new Date().getTime() - start) > timeout
throw new Error(message)
但是,也许以某种其他方式可以以某种其他简单的方式实现它,而不需要phantomjs
和复杂的C-extensions等额外依赖?
答案 0 :(得分:4)
您的应用程序应首先尝试异步连接到数据库,然后在连接可用时继续处理逻辑。例如:
db.connect(function(conn, err) {
if (err) throw err;
// Put your program logic using the db connection here...
});