我有我現在使用兩種方法,第一種是檢查一個網站,或根本沒有,通過檢查HTTP GET狀態代碼響應:如何檢查網站是否異步啓動?
checkifUp = (host, callback) ->
host = host.replace("http://", "").replace("/", "")
options =
host: "#{host}"
port: 80
path: "/"
req = http.get(options, (res) ->
callback(res.statusCode.toString())
req.connection.destroy()
)
的Javascript:http://goo.gl/OyekSx
並與第二個,我做的是從網站我有一個數組選擇隨機網站和驗證(與第一種方法的幫助下),如果這樣的網站了。如果是這樣,我想返回該網站作爲父方法的返回值(在本例中是第二個),但如果不是,我想重新運行該方法,直到它找到數組中的在線網站。這是我迄今所做的:
siteSet = ->
site_urls = ["sub1.mysite.com", "sub2.mysite.com", "sub3.mysite.com", "sub4.mysite.com", "sub5.mysite.com"]
random_site = site_urls[Math.floor(Math.random()*site_urls.length)]
checkifUp "#{random_site}", (code) ->
if code isnt "200"
siteSet()
else
selected_site = random_site
selected_site
的Javascript:http://goo.gl/ydmSiV
顯然,這不工作的方式我想:如果狀態代碼不是200,那麼它確實重新運行該方法,(到目前爲止,我們沒事);但問題出現在網站確實在線時,因爲我不知道如何返回selected_site變量(在checkifUp調用中聲明)作爲父方法的返回值(在這種情況下爲siteSet() )。我需要這樣做,以便能夠使用siteSet()返回值作爲另一個函數的變量:
otherFunc = ->
theSite = siteSet()
console.log(theSite)
的Javascript:http://goo.gl/cmsryJ
而且有信心它總是會被放置在這個內的在線網站URL(字符串)otherFunc()
我有兩個問題一下:
我怎麼能做到我想做的事嗎? (杜,一個很明顯嘿嘿)
我不太清楚這一點,但據我瞭解 的JavaScript/CoffeeScript中,當siteSet()會從內 otherFunc稱爲() ,(至少在這個「setup」中),otherFunc()不會等到siteSet()返回一個String(這是我想要的結果) 我是正確的嗎?即使有回報的問題解決了,我認爲是 將要發生的是,當我打電話siteSet()從 otherFunc()內將使用精確的結果從調用,這意味着如果當siteSet( )被拼命地跑,返回另一個呼叫 本身(因爲random_site選擇不在線)內otherFunc的 「theSite」變量()將採取裸()函數 的價值,我是不是正確的? (如果是這樣的話),如何解決這個 其他問題?我想設置 otherFunc()裏面的「theSite」變量,直到這樣的值是一個字符串,因爲我需要它。
在此先感謝您的幫助。
你試過把回調傳遞給siteSet,和checkifUp一樣嗎?這就是異步混亂如何處理現在heh :) – ezakto
你有3個迴應,請投票選擇更好的一個,或者如果你覺得沒有得到很好的迴應,請修復你的問題......謝謝.. – user1050817