情况:
Go包A由3个.go文件组成,我在每个文件中使用来自另一个包B的函数.我必须在每个文件的开头导入包B.
题:
包B实际上是初始化3次还是只有1次?
我有一个~1200个ruby对象的数组,我想循环遍历它们并删除名称中包含单词或部分单词的对象.
所以我尝试了这个:
list.each do |item|
if item.name =~ /cat|dog|rat/i
puts item.name
list.delete(item)
end
end
Run Code Online (Sandbox Code Playgroud)
它的工作原理,除了它似乎错过了一些名称应该匹配的项目.如果我再次运行它会发现更多,如果我再次运行它会发现更多.它每次都找不到,但我必须运行它3次才能删除所有内容.
世界上为什么会发生这种情况?
似乎只有在ajax请求能够从服务器获得某些响应时才会触发成功,错误和完整回调.
因此,如果我关闭服务器,则不会执行以下错误回调,并且请求会以静默方式失败.
$.ajax({
type: "GET",
url: "http://localhost:3000/",
dataType: "script",
success: function() {
alert("success");
},
error: function() {
alert("error");
}
});
Run Code Online (Sandbox Code Playgroud)
什么是在根本无法访问服务器时抛出错误的最佳方法.
编辑 - 从我的尝试和阅读看来,jQuery的内置错误处理似乎不适用于JSONP或dataType:"script".所以我要尝试设置手动超时.
编辑 - 做了一点研究,看起来不仅ajax错误回调不起作用,而且你不能用dataType脚本或jsonp中止ajax请求,这些请求忽略超时设置.
有一个替代方案 - jquery-jsonp插件,但它使用隐藏的iframe,我宁愿避免.所以我已经决定创建一个手动超时,如下所示.如果请求超时,则无法中止请求,这意味着即使在超时后脚本仍可能仍然加载,但如果服务器不可用,则至少会触发某些内容.
我以为我找到了一种简单的方法来立即返回http响应,然后在后台进行一些工作而不会阻塞.但是,这不起作用.
func MyHandler(w http.ResponseWriter, r *http.Request) {
//handle form values
go doSomeBackgroundWork() // this will take 2 or 3 seconds
w.WriteHeader(http.StatusOK)
}
Run Code Online (Sandbox Code Playgroud)
它第一次工作 - 立即返回响应并开始后台工作.但是,任何进一步的请求都会挂起,直到后台goroutine完成.有没有更好的方法来执行此操作,这不涉及设置消息队列和单独的后台进程.