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

How to update global variable on a successful event from inside a function (polling)?

<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(即 check_status 通过 Django 中的上下文)。因此,如果 status 为 1,则 var timer 行将开始每 2 秒调用一次 call_polling() 函数 因此,call_polling() 将查询 API 以检查状态,并在 {'check_status': 1} 等成功响应后将传输 status = 1。说明后台进程还是运行。一旦后端进程完成,我将 JSON 响应作为 {'check_status' : 0} 传递 应该是 status=0 然后它不会进入 if 而是清除轮询间隔(因为我们知道后台处理已经完成)并且对 API 的异步调用应该停止。

但它不起作用,javascript 仍然每 2 秒使 call_polling() 到 API 请求。我想通了 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,就设置了新的检查超时。