2009-12-23 53 views

回答

4

這意味着它的呼叫立即返回(不會阻止)。你稍後會得到結果,很可能是因爲回調觸發。

像這樣(僞代碼):

function printResult(result) 
    if result is "foo" print "FOO" else print "BAR" 

function fooBar() 
    Orm.myQuery().setCallback(printResult) 
    Orm.myOtherQuery().setCallback(printResult) 

在這個例子中,這兩個查詢將在同一時間被執行(和來自第二查詢的響應能來之前第一)。

它在使用非阻塞IO的程序中非常有用。查詢在同一時間執行,可能在多個數據庫上執行,具有很好的延遲性。 如果每個查詢需要1毫秒,執行10個查詢仍然只需要1毫秒,而不是10毫秒。

+0

不阻止線程實際上並不是最重要的問題:無論如何,通常不能異步使用連接(即,只有在不同連接上發送查詢時,此方法纔有效)。通常將多個查詢分組在一起通常更重要:無論如何,當查詢被執行時,您可以在客戶端上做一些工作;但是如果查詢相對簡單,將它們分組在一起會節省大量往返數據庫的時間。許多ORM(至少NHibernate,DataObjects.Net)爲未來(延遲)的查詢提供支持,從這一點來看,這些查詢更具吸引力。 – 2009-12-23 13:29:04