给我的印象是type Response events.APIGatewayProxyResponse
var db *sql.DB
func init() {
var err error
db, err = sql.Open("postgres", fmt.Sprintf(
"host=%s port=%d user=%s dbname=%s password=%s",
os.Getenv("DB_HOST"),
os.Getenv("DB_PORT"),
os.Getenv("DB_USER"),
os.Getenv("DB_NAME"),
os.Getenv("DB_PASS"),
))
if err != nil {
fmt.Printf("Database connection booboo")
panic(err)
}
}
每隔setInterval(function, delay)
毫秒安排一次呼叫function
的时间。它将重复执行此操作,直到调用delay
。但是,似乎我丢失了一些东西。
我有以下示例页面。目的很简单:每秒使文本从加载-> 加载。-> 加载.. 切换。这是按预期方式工作的循环示例:
clearInterval()
$(document).ready(function(){
$('#loading_icon').html("Loading");
loop = setInterval(function() {
updateText();
}, 1000);
});
function updateText() {
loadingText = $('#loading_icon').html();
$('#loading_icon').html(loadingText == "Loading" ? "Loading." :
loadingText == "Loading." ? "Loading.." :
"Loading");
}
什么都没有。问题是,只要JavaScript在做其他事情,它就不会执行此代码。我设置了以下示例:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="loading_icon">Loading</div>
$(document).ready(function(){
$('#loading_icon').html("Loading");
loop = setInterval(function() {
updateText();
}, 1000);
for(i = 0; i < 100000; i++)
var a = fib(i); // Just an arbitrary method to simulate work
});
function fib(n){
var a=1,b=0,t;while(n>=0){t=a;a=a+b;b=t;n--;}return b;
}
function updateText() {
loadingText = $('#loading_icon').html();
$('#loading_icon').html(loadingText == "Loading" ? "Loading." :
loadingText == "Loading." ? "Loading.." :
"Loading");
}
理想情况下,当我们执行所有这些工作时,文本会发生变化(毕竟,这就是我编写此“加载”功能的全部原因)。但是,似乎没有任何对<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="loading_icon">Loading</div>
的调用被调用,直到JS没有更好的事情要做。
我在这里想念什么?有什么办法可以实现我的追求吗?
答案 0 :(得分:0)
是的,它仍然有效-问题是您在fib
上的循环首先运行,然后在setInterval
上运行。您可以减小循环长度以使其工作正常:
$(document).ready(function() {
$('#loading_icon').html("Loading");
loop = setInterval(function() {
updateText();
}, 1000);
for (i = 0; i < 100000; i++)
var a = fib(i); // Just an arbitrary method to simulate work
});
function fib(n) {
var a = 1,
b = 0,
t;
while (n >= 0) {
t = a;
a = a + b;
b = t;
n--;
}
return b;
}
function updateText() {
loadingText = $('#loading_icon').html();
$('#loading_icon').html(loadingText == "Loading" ? "Loading." :
loadingText == "Loading." ? "Loading.." :
"Loading");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="loading_icon">Loading</div>
不幸的是,您不能做一个非常长的循环,而setInterval
不能同时运行。
答案 1 :(得分:0)
您对setInterval()
的理解似乎是正确的。它不应在其回调函数之外暂停代码。您的代码很可能被其他地方捕获。
对于完成您想做的事情,您的解决方案应该可以工作,但这不是操纵DOM的一种非常优雅的方法。我看到您使用的是jQuery,它的功能非常强大animation functionality。我会考虑使用这样的东西。