我有我现在使用两种方法,第一种是检查一个网站,或根本没有,通过检查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