gpt4 book ai didi

javascript - 如何从函数内部更新成功事件的全局变量(轮询)?

转载 作者:行者123 更新时间:2023-12-03 01:41:54 28 4
gpt4 key购买 nike

<script>

var status = {{ check_status }};

call_polling = function() {
// polling request to API (async)
success:function(result){
status = result.check_status;
}

}


if(status) {
var timer = setInterval(function() { call_polling(); }, 2000);
}
else{
clearInterval(function(){ call_polling();});
}
</script>

所以,我有一个带有异步请求的代码来查看后端进程的状态。因此,首先我将 status 设置为 1(即通过 Django 中的上下文进行 check_status)。因此,如果 status 为 1,则 vartimer 行将开始每 2 秒调用 call_polling() 函数因此,call_polling() 将查询 API 以检查状态,并在成功响应(如 {'check_status': 1})时传输 status = 1 。表明后端进程仍在运行。后端进程完成后,我将 JSON 响应作为 {'check_status' : 0} 传递,其中应该是 status=0 然后它不会进入 if 而是清除轮询间隔(因为我们知道后台处理已经完成)并且异步调用 API 应该停止。

但是它不起作用,并且 javascript 仍然每 2 秒对 API 请求进行一次 call_polling() 。我找出了原因,因为 var status 全局声明为 1 ,即使我替换 status = result.check_status 。在函数上下文之后,它将始终保持为 1,并且仅进入 if 循环;无论它从 JSON 响应收到什么。

所以,问题是如果 result.check_status 为 0(即 { 'check_status':2} 作为 API 调用的响应)??

最佳答案

具体操作方法如下:

var status = {{ check_status }};

function call_polling() {
// polling request to API (async)
success: function (result){
status = result.check_status;
if (status) setTimeout(call_polling, 2000);
}
}

call_polling();

简而言之,只要响应为1,就会设置新的检查超时时间。

关于javascript - 如何从函数内部更新成功事件的全局变量(轮询)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50803626/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com