對於一些特殊情況,比如'require',阻止執行是有意義的,以使事情變得更簡單。連接到Node.JS中的數據庫
我有一個類似的情況,我需要一種方法來使數據庫連接,封鎖。 而且,因爲它只發生一次 - 當應用程序啓動並保存在全局對象中供以後重用時,它不會影響性能。
的問題:
- 節點沒有 '睡眠' 的方法。
- 有事件循環的一些技巧,你必須阻止它,但同時允許處理它的數據庫連接的東西。
其實我已經做到了,通過使用waitFor
從茉莉節點,但是當我看着它源 - 這是非常複雜的,並使用phantomjs C-擴展。
可悲的是,簡單的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-擴展?
爲什麼不等到啓動應用程序,直到數據庫連接建立? 'db.connect(function(err){... start app here ...});保存在全局對象中以備後用的' – 2012-01-10 17:57:15
「聽起來不太好。 – 2012-01-10 18:00:13